Thread: Java priemgetallen
-
30-09-2010, 15:13 #1
Java priemgetallen
ik heb een probleem , ik wil de eerste 200 priemgetallen berekenen en uit printen tot nu toe heb ik dit maar er komt niks uit help ?
import javax.swing.*;
public class Opdracht3
{
public static void main(String[] args)
{
int priemgetal=0;
int restwaarde=0;
int x;
int d;
boolean ispriemgetal=true;
priemgetal++;
System.out.println(priemgetal+"= 2");
for(x=3;priemgetal<=200;x=x+2);
{
for(d=2;d<x;d++);
{
if(priemgetal%d==0);
{
ispriemgetal=false;
}
}
}
if(ispriemgetal==true);
{
priemgetal++;
System.out.println(priemgetal+"=" +x);
}
}
}no votes
-
-
30-09-2010, 16:24 #2Approved 9-lifer
- Registered
- 21/08/08
- Location
- Hasselt
- Posts
- 2,653
- iTrader
- 8 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 5/46
Vooreerst een paar opmerkingen, als je op een forum een stukje code post kan je dat best doen door gebruik te maken van de "code"-tags. Dan is alles al een stuk overzichtelijker geïndenteerd
Ook webservices als Pastebin e.d. zijn erg nuttig.
Ook je code opruimen is handig wanneer je foutjes zoekt. Er zijn variabelen die je niet gebruikt, en je importeert een package die je nergens gebruikt. Ook tussen variabelen en operatoren kan je best een spatie zetten enzovoort.
Je initialiseert ook de variabele priemgetal op 0, waarna je meteen ++ doet.
Wanneer je code proper is, is deze leesbaarder, en dan zie je rapper foutjes
Zoals hieronder bijvoorbeeld.
Je gaat in die for-lus, maar je kan daar onmogelijk uit geraken. Je zegt dat de conditie "priemgetal <= 200" is. De variabele priemgetal is 1 en zal nergens veranderen, die stopt dus nooit die lus
Jij wil waarschijnlijk die x veranderen naar priemgetal.
Je if-constructie staat trouwens buiten de 2 forlussen, volgens mij wil je die binnen de buitenste, en buiten de binnenste?
Hier is een mogelijke oplossing die ik net even gemaakt heb: (op voorbehoud van optomalisaties enzovoort)
Code:public class Priemgetallen { public static void main(String[] args) { boolean isPriem = true; /* itereer over alle getallen die mogelijk een priemgetal kunnen zijn */ for(int testgetal = 2; testgetal <= 200; ++testgetal) { /* itereer over alle getallen die het testgetal mogelijk kunnen delen */ for(int deler = 2; deler <= testgetal/2 && isPriem; ++deler) { /* is het testgetal deelbaar door het priemgetal? */ if((testgetal % deler) == 0) { isPriem = false; } } /* verwerking (mogelijk) priemgetal */ if(isPriem) { System.out.println(testgetal + " is een priemgetal"); } isPriem = true; } } }o/'no votes
-
30-09-2010, 18:38 #3Approved 9-lifer
- Registered
- 04/02/04
- Location
- 3010/3690
- Posts
- 4,208
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 4/43
Voor de delers hoeft ge volgens mij niet van 2 tot testgetal/2 te gaan, maar volstaan de gehele getallen tussen 2 en sqrt(testgetal)
I'm a writer. I think, I type, I drink. Lather, rinse, repeat. Not always in that order.
no votes
-
30-09-2010, 18:47 #4Approved 9-lifer
- Registered
- 21/08/08
- Location
- Hasselt
- Posts
- 2,653
- iTrader
- 8 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 5/46
Inderdaad
o/'no votes
