2017-03-04 8 views
0

これは電卓プログラムです。私はそれのように書く:文字列入力が無視されています

public static void main(String[] args) { 

    Scanner input = new Scanner (System.in); 
    int x1 = input.nextInt(); 
    int x2 = input.nextInt(); 
    String x3 = input.nextLine(); 

    if ("+".equals(x3)){ 
     int r= x1 + x2; 
     System.out.println(r); 
    } else if ("-".equals(x3)) { 
     int r= x1 - x2; 
     System.out.println(r); 
    } else if ("*".equals(x3)) { 
     int r= x1 * x2; 
     System.out.println(r); 
    } else if ("/".equals(x3)) { 
     int r= x1/x2; 
     System.out.println(r); 
    } else if ("%".equals(x3)) { 
     int r= x1 % x2; 
     System.out.println(r); 
    } else { 
     System.out.println("invalid input"); 
    } 
} 

プログラムは、3番目の入力を取るのを待つことはありません。 3番目の入力だけで別のスキャナオブジェクトを作成しようとしたところ、コードはうまくいきました。 また、最初に文字列入力を行うように入力を取る順序を入れ替えようとしたとき、コードはうまく機能しました。 誰でも何が起こっているか教えていただけますか?

+0

これはJavaですか?プログラミング言語でタグ付けしてください。 –

答えて

1

Stringを解析してintに変換する関数を追加して解決しました。 input.nextLine()を使用して、Scannerと一緒に関数に渡し、その値を使用する必要があります。 Stringが数値でない場合は、別の入力を求めます。

private static int parseInt(String s, Scanner input) { 
    try { 
     return Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
     return parseInt(input.nextLine(), input); 
    } 
} 

あなたはこのようにそれを使用することができます。問題はinput.nextInt()ある

public static void main(String[] args) { 
    Scanner input = new Scanner (System.in); 
    int x1 = parseInt(input.nextLine(), input); 
    int x2 = parseInt(input.nextLine(), input); 
    String x3 = input.nextLine(); 

    if ("+".equals(x3)){ 
     int r= x1 + x2; 
     System.out.println(r); 
    } else if ("-".equals(x3)) { 
     int r= x1 - x2; 
     System.out.println(r); 
    } else if ("*".equals(x3)) { 
     int r= x1 * x2; 
     System.out.println(r); 
    } else if ("/".equals(x3)) { 
     int r= x1/x2; 
     System.out.println(r); 
    } else if ("%".equals(x3)) { 
     int r= x1 % x2; 
     System.out.println(r); 
    } else { 
     System.out.println("invalid input"); 
    } 
} 
0

は、数字だけを読んでいるとinput.nextLine()はその後、空の文字列を読み込みます。そのため、は空の文字列とみなされ、最後にエラーが発生します。

@LórántViktor Gerberの提案はうまくいきます。

また、適切な入力を読んで(印刷することができます)、入力するユーザーを信頼しないことをお勧めします。ユーザーがstringまたはdoubleのような間違った入力をintegerの代わりに入力すると、プログラムはexceptionを返します。

関連する問題