2016-10-23 46 views
0

以下是我對[m,n]區間中數字的Goldbach`s猜想問題的解決方案。代碼有效,但讀取a和m的值時出現問題。如果我沒有引入超過2個輸入值(如4或更多),則什麼都不會發生。如果我這樣做,第一個值分配給m,最後一個分配給n。這是爲什麼發生?我該如何糾正它?所有的掃描儀類Java - 讀取太多輸入值

public class GoldbachConjecture { 

    public static void Goldbach(int x) { 
     int ok=0; 
     for (int i = 3; i < x/2 && ok==0; i++) { 
      if (isPrime(i) && isPrime(x - i)) { 
       System.out.println("The number is " + x + " Prime Numbers are " + i + " " + (x - i)); 
       ok=1; 
      } 
     } 
    } 

    public static boolean isPrime(int x) { 
     for (int i = 2; i < x/2; i++) { 
      if (x % i == 0) { 
       return false; 
      } 
     } 
     return true; 
    } 


    public static void main(String[] args) { 


     System.out.print("Give the interval"); 

     Scanner in1= new Scanner(System.in); 
     int m = in1.nextInt(); 

     Scanner in2=new Scanner(System.in); 
     int n=in2.nextInt(); 

     for(int nr = m; nr <= n; nr++) 
     { 
     if(nr>2 && nr%2==0) 
       Goldbach(nr); 
      } 
} 
} 
+0

你並不需要超過2個數字輸入。由於您使用兩個獨立的'Scanner'實例,因此您不能將它們輸入到同一行。 – Tom

回答

0

杉杉,你應該只使用一個Scanner。我認爲問題在於Scanner.nextInt()不會「消耗」您輸入的字符(您在終端中輸入時輸入的那個字符)。

一種解決方法是在Scanner.nextInt()之後調用Scanner.nextLine()

Scanner sc = new Scanner(System.in); 
int m = sc.nextInt(); 
sc.nextLine(); // consuming last new line. 

UPDATE:你可以試試這個解決方法太(如https://stackoverflow.com/a/13102066/4208583所示):

Scanner sc = new Scanner(System.in); 
int m; 
try { 
    m = Integer.parseInt(sc.nextLine()); 
} catch (NumberFormatException e) { 
    e.printStackTrace(); 
} 
+0

您可以保留第一句,但其他內容在這裏不正確。 OP代碼中不需要消耗剩餘的行結束符。 – Tom