Mein Ziel ist es, Benutzereingaben zu erhalten und herauszufinden, ob es sich um eine Primzahl handelt.Warum funktioniert der folgende Code nicht richtig? (Java)
»Ich habe stundenlang daran gearbeitet, und es funktioniert fast. Wenn ich jedoch 2 oder 3 eingebe, bekomme ich nichts. Die Do-While-Schleife springt einfach zur nächsten Iteration.
Die for-Schleife, die ich erstellt habe, funktioniert nicht für 2 oder 3, also habe ich eine separate if-Anweisung dafür erstellt. Die Sache ist, es funktioniert nicht. Und ich habe keine Ahnung warum, außer dass es wahrscheinlich nicht ausgeführt wird.
import java.util.Scanner;
public class Lab4a {
public static void main (String [] args) {
Scanner scnr = new Scanner(System.in); //creates a Scanner that will receive user input
boolean isPrime = false; //this, in the end, is where the "primeness" of the input is stored
int num; //the variable which will store the user input
boolean isOver = false; //is true once the "primeness" of the input has been decided
do { //executes at least once
System.out.println("Enter a positive integer or 0 to exit:"); //prompts the user for input
num = scnr.nextInt(); //stores the input
if (num == 0) { //if the number is zero, the loop terminates; if it's negative, the loop terminates as well
System.exit(0);
} else if (num < 0) {
System.out.println("Please enter a positive integer.");
System.exit(1);
}
for (int mult = 2; mult <= num/2; mult++) { //divides the user input by 2, tests for if anything remains; increments by one up to the half of the number. If a remain is encountered,
// isPrime becomes false and isOver true and the for loop is terminated. If not, the for loop will end with isPrime true and isOver false
if (num % mult == 0) {
isPrime = false;
isOver = true;
break;
} else {
isPrime = true;
isOver = true;
}
}
if (num == 2 || num == 3) { //the for test above does not work if the user input is 2 or 3, so a separate if statement tests for that
isPrime = true;
}
} while (!isOver); //if isOver is true, the while loop ends
if (isPrime == true) { //prints the appropriate answer
System.out.println(num + " is prime.");
} else {
System.out.println(num + " isn't prime.");
}
}
}
Ich versuche, in der Regel diese Probleme selbst zu lösen, aber ich habe wieder für buchstäblich 4 Stunden bei dieser schuftet und ich habe noch ein anderes, ähnliches Programm zu schreiben und einen Kalkül Quiz für morgen vorzubereiten, in dem ich genau Jack Scheiße kenne. Ich bin wirklich verzweifelt.
TL; DR: Das Programm funktioniert nicht richtig, wenn ich 2 oder 3 eingib; wahrscheinlich, weil die if-Anweisung nicht ausgeführt wird. Darüber hinaus weiß ich nichts.
Danke für jede Hilfe!
Dies ist eine ausgezeichnete Gelegenheit für Sie zu lernen, wie man Code debuggen. Auch ist Ihr schlechtes Zeitmanagement kein Grund, Ihr Problem bei einem Haufen Internetfremder auszulagern. – rmlan
Setzen Sie 'isOver = true;' in den 'if'-Block. –
/Ich zieht den Taschenrechner aus und prüft den Wert von 2% 2 – MeBigFatGuy