2017-03-22 3 views
-3

내 목표는 사용자 입력을 받고 소수인지 여부를 확인하는 것입니다.다음 코드가 제대로 작동하지 않는 이유는 무엇입니까? (Java)

'몇 시간 동안 이걸로 노예 상태에 있었고 거의 작동합니다. 그러나 2 또는 3을 입력하면 아무 것도 얻지 못합니다. do-while 루프는 다음 반복으로 건너 뜁니다.

내가 만든 for 루프는 2 또는 3에서 작동하지 않으므로 별도의 if 문을 만들었습니다. 문제는 작동하지 않는다는 것입니다. 그리고 나는 아마 그것이 실행되지 않는다는 것 외에는 이유에 대한 단서를 가지고 있지 않습니다. ,

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."); 
     } 
    } 
} 

나는 일반적으로 이러한 문제를 스스로 해결하려고 노력하지만, 내가 다시 말 그대로 4 시간 동안이 멀리 노예되었고, 나는 아직도 내일을 준비하기 위해 작성하는 다른 유사한 프로그램과 수학 퀴즈를 나는 정확히 잭 똥을 알고있다. 나는 정말로 필사적이다.

TL : DR : 2 또는 3을 입력하면 프로그램이 제대로 작동하지 않습니다. if 문이 실행되지 않기 때문일 수 있습니다. 그 너머, 나는 아무것도 모른다.

도움 주셔서 감사합니다.

+2

이것은 당신이 코드를 디버깅하는 방법을 배울 수있는 좋은 기회입니다. 또한, 당신의 가난한 시간 관리가 인터넷 낯선 사람들의 무리에게 문제를 덜어주는 이유는 아닙니다. – rmlan

+0

'if' 블록에'isOver = true;'를 넣습니다. –

+1

/me 계산기를 꺼내서 2 %의 값을 확인하십시오. 2 – MeBigFatGuy

답변

0

boolean isPrime = false;boolean isPrime = true;으로 변경하고 전체 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

for 루프 for (int mult = 2; mult <= num/2; mult++)에 대한 제한 설정에 문제가 있습니다.

입력이 2 num/2 또는 3 일 때 num/2이 1을 반환하고 실행 조건이. mult<=2이 실패합니다.

+0

숫자 % 1 == 0이므로 모든 숫자가 소수 일 수 있습니다. –

0

put isOver = true; 여기서 num이 2 또는 3인지 확인합니다. do while 루프가 끝나지 않으므로. 또는 for 루프가 시작되기 전에 do while 루프를 끝낼 수 있습니다.

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

시험에 다시 한번 감사드립니다. – 7663233