primzahlen

misterazz

Neues Mitglied
Hey, bin gerade dabei das Buch "Java ist auch eine Insel" zu lesen um mir selbst ein bisschen Java beizubringen. Wie man im folgenden Programm sieht, bin ich ein totaler Anfänger und wollte einmal etwas Praktisches ausprobieren. Im folgenden sieht man ein Programm, das von 1-20 die Primzahlen ausgeben soll, doch es funktioniert natürlich nicht 😀 Ist mein Ansatz total falsch?




public class Primzahlen2 {


public static void main(String[] args) {

int cntteiler = 1;
int boarder = 20;
for(int cntprim =1; cntprim <= boarder; cntprim++)
{
while(cntprim % cntteiler !=0)
{
cntteiler++;
}
if(cntprim % cntteiler == 0)
System.out.println(cntprim + "ist eine Primzahl");

}

}
}
 
Hi, willkommen im Forum. Bitte benutze doch JAVA Tags (In roter Schrift beim Verfassen eines neuen Posts) und gib eine Fehler- oder Verhaltensbeschreibung mit. "Funktioniert nicht" ist nicht hilfreich.
 
Teile die Aufgabe in sinnvolle Stücke. Erst einmal brauchst du eine Methode, die eine Zahl auf Teiler testen kann, dann kannst du diese Methode für die Zahlen von 1 bis 20 aufrufen.

Wie sieht nun die Methode aus? Jede Zahl (auch eine Primzahl) ist durch 1 und sich selbst teilbar. Diese beiden (sogenannten "unechten") Teiler interessieren uns nicht, wir wollen Teiler finden, die dazwischen liegen. Also lässt du eine Schleife von zwei bis (unsereZahl-1) laufen (das lässt sich noch optimieren, aber erst einmal muss es funktionieren) und testest, ob die Schleifenvariable unsere Zahl teilt. Ob a durch b teilbar ist, stellt man mit [c]a % b == 0[/c] fest.

Eine Feinheit ist, dass 0 und 1 nicht zu den Primzahlen gezählt werden, obwohl sie keine echten Teiler besitzen.
 
Ist mein Ansatz total falsch?

Nein, total falsch ist der nicht. Aber schau Dir mal genau an, was Dein Code macht. In der while() Schleife suchst Du den ersten ganzzahligen Teiler Deiner Zahl. Soweit richtig, nur solltest Du, wie SleepProgger schon sagte, nicht mit der "1" anfange zu prüfen, den das geht immer (oben im Code cnteiler = 2 setzen). In der "if" Prüfung willst Du dann prüfen, ob der gefundene Teiler gleich Deiner zur prüfenden Zahl ist, dann solltest Du es auch so schreiben:

Code:
if (cntprim == cntteiler) {
  //
}

Und vor der nächsten Prüfung muss Du cntteiler natürlich wieder auf den Ausgangswert zurücksetzen

Code:
cntteiler = 2;

Dann klappt es auch.

Willkommen im Forum und viel Spaß beim lernen.
 

Neue Themen


Zurück
Oben