2016-10-23 6 views
0

[m、n]間隔の数値に対するGoldbachの推測の問題に対する私の解です。コードは機能しますが、aとmの値を読み取る際に問題があります。 2つ以上の入力値(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つの以上の数字を必要としません。 2つの独立した 'Scanner'インスタンスを使用する悪い選択のため、同じ行にそれらを入力することはできません。 – Tom

答えて

0

ファーズ、あなただけの1Scannerを使用する必要があります。私は問題がScanner.nextInt()があなたの入力のnew line文字を消費しないという事実にあると思うと思います。

回避策の1つはを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

関連する問題