2017-03-22 2 views
-3

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!

+2

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

+0

Setzen Sie 'isOver = true;' in den 'if'-Block. –

+1

/Ich zieht den Taschenrechner aus und prüft den Wert von 2% 2 – MeBigFatGuy

Antwort

0

Ändern Sie die boolean isPrime = false; zu boolean isPrime = true; und entfernen Sie die gesamte else.

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 = true; //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; 
     } 
    } 
} while (!isOver); //if isOver is true, the while loop ends 
-1

Problem bei der Festlegung der Grenzwerte für Ihre for Schleife for (int mult = 2; mult <= num/2; mult++).

Wenn der Eingang 2 num/2 oder 3 ist, gibt num/2 1 zurück, und Bedingung zum Ausführen viz. mult<=2 schlägt fehl.

+0

Beliebige Zahl% 1 == 0, also wären alle Zahlen Primzahlen. –

0

Setzen isOver = true; wo Sie überprüfen, ob num 2 oder 3 ist. Weil die Do While-Schleife nie enden würde. Oder Sie können die do while-Schleife beenden, bevor die for-Schleife beginnt.

0
public static void main (String [] args) { 
    Scanner scnr = new Scanner(System.in); 
    System.out.println("Enter a positive integer or 0:"); 
    int num = scnr.nextInt(); 

    if (num <= 0) { 
     System.out.print("Too small"); 
    } else { 
     System.out.println("is prime "+isPrime(num)); 
    } 

} 

private static Boolean isPrime(int num) { 
    if (num < 4) { 
     return true; 
    } 

    for (int i = 2; i < num; i++) { 
     if ((num%i) == 0) { 
      return false; 
     } 
    } 

    return true; 

} 
+0

Viel Glück bei Ihren Prüfungen. – 7663233

Verwandte Themen