2016-10-23 26 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