2016-10-23 3 views
0

Вот мое решение проблемы гипотезы Гольдбаха для чисел в интервале [m, n]. Код работает, но есть проблема с чтением значений a и m. Ничего не происходит, если я не вводить более двух входных значений (например, 4 или более). Если я это сделаю, первое значение присваивается m, а последнее - n. Почему это происходит? Как я могу это исправить?Scanner Class 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 числа в качестве входных данных. Вы просто не можете вводить их в одну строку из-за плохого выбора двух независимых экземпляров «Сканер». – Tom

ответ

0

Елки всех, вы должны использовать только одинScanner. Я думаю, проблема заключается в том, что Scanner.nextInt() не «потребляет» символ new line вашего ввода (тот, который вы вводите, когда вы нажимаете enter в терминале).

Один способ обхода вызывает Scanner.nextLine() после Scanner.nextInt().

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