2017-05-14 34 views
-2

即時通訊相當新的Java,只是不知道爲什麼我的程序不工作。任何人都可以做的幫助將不勝感激!試圖找到下一個素數,不知道什麼是錯的。 Java

public class LabOne { 
    public static void main(String[] args) { 

     System.out.println("Please input a number: \n"); 

     int inputReceive = 44; 
     int nextPrime = inputReceive; 
     int n = 5; 
     boolean isprime=true; 

     do { 
      if(inputReceive <= 1) 
       isprime = false;  
      else if(inputReceive <= 3){ 
       System.out.printf("%d \n",isprime); 
       return;  
      }else if(inputReceive % 2 == 0 || inputReceive % 3 == 0) 
       isprime = false; 
      while ((n*n)<inputReceive){ 
       if (inputReceive % n == 0 || inputReceive % (n + 2) == 0) 
       isprime = false; 

       n = n+6; 
       isprime = true; 
      } 
      nextPrime++; 
     }while(isprime = false); 

     System.out.printf("Next prime number is %d",nextPrime); 
    } 
} 

給定的輸出將是45,那是不正確的。

+0

http://stackoverflow.com/questions/2831192/java-program-for-prime-numbers?rq=1 –

+3

的可能的複製不能說計劃,但這種情況似乎不正確。 'while(isprime = false);' –

+1

在do ... while循環中,你有很多關於inputReceive的問題。這些問題的答案在循環的第一次迭代後不會改變,因爲inputReceive沒有改變。擺脫這個問題將簡化你的代碼,並使其更容易看到什麼不工作。 –

回答

0

的幾個問題:

while(isprime = false); 

這是任務,不是平等的測試。由於您正在分配false,因此不會循環。

  n = n+6; 
      isprime = true; 

你無條件地這樣做。

擴展如下。

+0

好的,謝謝!任何幫助表示讚賞 –

+0

'!isPrime'就是你想要的。 –

0

忽略已經指出的事情,您在inputRecieve上執行所有檢查,並且從不更新它。你只能無條件地更新nextPrime,而且永遠不要檢查其最初。這裏是我會怎麼做:

public static boolean isPrime(int x){ 
    boolean result = true; 

    for(int i = 2; i<=Math.sqrt(x); i++){ 
     if((x % i) == 0){ 
      result = false; 
     } 
    } 

    return result; 
} 

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 

    System.out.println("Please insert a number:"); 
    int inputRecieve = sc.nextInt(); 

    boolean notPrime = true; 

    while(notPrime){ 
     if(isPrime(++inputRecieve)) 
      notPrime = false; 
    } 

    System.out.println("Next prime number is: " + inputRecieve); 

} 
相關問題