0

コードを実行すると、文字列をスキャンせずにプログラムが終了します。

double x, y;
    String s;
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter Number: ");
    x = scan.nextDouble();
    System.out.println("Enter Number 2: ");
    y = scan.nextDouble();
    System.out.println("Enter Operater: x,+,/,-");
    s = scan.nextLine();
    if(s.equals("x"))
    {
        System.out.print(x * y);

    }
    else if(s.equals("+"))
    {
        System.out.print(x + y);

    }
    else if(s.equals("/"))
    {
        System.out.print(x / y);

    }
    else if(s.equals("-"))
    {
        System.out.print(x - y);

    }
    scan.close();

プログラムが前s = scan.nextline(); に終了するのはなぜですか?

4

2 に答える 2

0

ユーザー入力は、最適には次のようになります。

-ここにカーソル- num1 NEWLINE

num2 改行

演算子 NEWLINE

複数の呼び出しを行う場合nextDouble()、プログラムは最初に double を 1 つ読み取ります。

num1 -ここにカーソル- 改行

num2 改行

演算子 NEWLINE

次に、ユーザーは入力を送信するためにエンターを入力する必要がありnextDouble()ます。そのため、カーソルの直後に数字がないため、2 番目のユーザーは読み取るものを見つけることができません。nextLine()改行を吸収するには が必要です。

残念ながら、nextLine()改行を吸収する a が間違った場所にあります。

num1 改行

-ここにカーソル- num2 NEWLINE

演算子 NEWLINE

したがって、プログラムは最初の で double を吸収nextDouble()し、2 番目の では何も吸収せず、改行を で吸収しますnextLine()

これを修正するには、scan.nextLine()各 の後に right を追加しnextDouble()ます。nextLine()演算子を持つもの以外に、呼び出しを読み取る必要はありません。

于 2013-07-23T20:00:16.740 に答える