Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Guten Abend euch allen! Ich hab mir heute ein kleines Programm für Primzahlen geschrieben. Leider funktioniert es nicht und ich wäre sehr dankbar wenn jemand meinen Fehler finden könnte. Ich bin noch relativ unerfahren im Programmieren. Oftmals fallen mir nicht die geeigneten Operatoren ein oder ich muss etwas länger überlegen.
Ich hab mal die Kommentar Funktion bei Java genutzt und meine Gedankengänge aufgeschrieben was das Programm konkret machen soll.
Bevor ich es vergesse, ich benutze Eclipse Java Mars zum schreiben.
Java:
package ausprobieren;
import java.util.Scanner;
public class Primzahlen {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Zahl:");
int uZahl = scan.nextInt();
primzahl(uZahl);
scan.close();
}
public static void primzahl(int uZ) {
int r = 0; // r soll rest bedeuten
int uZ1 = uZ - 1; // Ansonsten geht die for schleife bis uZ und der Rest wäre immer 0
//Überprüfe ob der Rest von der Division uZ%1 = 0 oder 1 ist
//Wenn der Rest 0 ist, dann rechne (rest = uZ%1). Abbruch der Do While Schleife
do {
for (int i = 2; i < uZ1; i++) {
if (uZ % i != 0) { r = uZ % 1;
i = uZ1;} //i = uZ1 für den Abbruch der for schleife
else { r = uZ % i;} //Wenn der Rest 1 ist, rechne weiter bis es ein Ergebnis gibt
}
}
while(r == 1 || r == 0); //do schleife bis der Rest 1 oder Rest 0 ist
if (r==0) { System.out.println(uZ + " ist keine Primzahl."); //ist der Rest 0 dann System.out.print + keine Primzahl
}
else if (r==1){ System.out.println(uZ + " ist eine Primzahl."); //ist der Rest 1 dann System... + ist eine Primzahl
}
}
}
Also ich habe die Berechnung selbst jetzt nicht im Detail angesehen, aber was direkt auffällt:
Du bleibst in der while schleife, so lange r 1 oder 0 ist. Das bedeutet, dass nach der While Schleife r nie 0 oder 1 sein kann, denn dann wäre er ja in der Schleife geblieben.
Der Kommentar besagt auch etwas anderes. Du willst in der While Schleife bleiben, bis es nicht mehr o oder 1 ist. Also musst Du das negieren:
while (!(r==1) || (r==0))
was gleichbedeutend ist mit
while (r !=1 && r != 0)
Hab das mal so abgeändert, aber ich möchte in der Schleife nur 1x bleiben. Am Ende soll sie ja abbrechen wenn der Rest 1 oder 0 ist.
Hab die Do While Schleife mal durch eine For ersetzt. Mit dem Code bekomme ich jetzt aber raus das sie keine Primzahl ist, und da spielt die Zahl keine Rolle (Egal ob ich 7, 10, 5... eingebe)
Java:
package ausprobieren;
import java.util.Scanner;
public class Primzahlen {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Zahl:");
int uZahl = scan.nextInt();
primzahl(uZahl);
scan.close();
}
public static void primzahl(int uZ) {
int r = 0; // r soll rest bedeuten
int uZ1 = uZ - 1; // Ansonsten geht die for schleife bis uZ und der Rest wäre immer 0
//Überprüfe ob der Rest von der Division uZ%1 = 0 oder 1 ist
//Wenn der Rest 0 ist, dann rechne (rest = uZ%1). Abbruch der Do While Schleife
for (int p = 0; p > 2; p++){
for (int i = 2; i < uZ1; i++) {
if (uZ % i == 0) { r = uZ % 1;
i = uZ1;} //i = uZ1 für den Abbruch der for schleife
else { r = uZ % i;} //Wenn der Rest 1 ist, rechne weiter bis es ein Ergebnis gibt
}
}
//while(r != 1 || r != 0); //do schleife bis der Rest 1 oder Rest 0 ist
if (r==0) { System.out.println(uZ + " ist keine Primzahl."); //ist der Rest 0 dann System.out.print + keine Primzahl
}
else if (r==1){ System.out.println(uZ + " ist eine Primzahl."); //ist der Rest 1 dann System... + ist eine Primzahl
}
}
}