3

学校のプロジェクトでは、try/catch を使用して、ユーザーが目的の入力タイプ (つまり double) ではなく文字を入力したときにプログラムがクラッシュしないようにしようとしています。

    public static double inputSide () {
    Scanner in = new Scanner(System.in);
    double side = -1;
    do {
        try {
        System.out.println("Enter a side length (in units):");
        side = in.nextDouble();
        }
        catch(InputMismatchException e){
            System.out.println("Must input number");

            }
    } while (side < 0);
    return side;
}

このコードを実行すると、「辺の長さを入力してください (単位で):」と「数字を入力する必要があります」を無限に出力するループに陥ります。私は try/catch を初めて使用するので、この動作に慣れていないだけかもしれません。とにかく、誰かが私が問題を理解するのを手伝ってくれるなら、それは大歓迎です。前もって感謝します。

4

1 に答える 1

4

入力が間違っている場合は、バッファを解放する必要があります。catchブロックに次の行を追加します。

in.next();

そして、すべてがうまくいくはずです:

public static double inputSide () {
    Scanner in = new Scanner(System.in);
    double side = -1;
    do {
        try {
            System.out.println("Enter a side length (in units):");
            side = in.nextDouble();
        }
        catch(InputMismatchException e){
            System.out.println("Must input number");
            //this line frees the buffer
            in.next();
        }
    } while (side < 0);
    return side;
}

今後は利用を検討

if(in.hasNextDouble()){
    //read
}

try-catch ブロックの代わりに

于 2013-04-06T18:47:10.500 に答える