0

これが私のJavaコードです:

Scanner userInput = new Scanner(System.in);
while (true) { // forever loop
    try {
        System.out.print("Please type a value: "); // asks user for input
        double n = userInput.nextDouble(); // gets user input as a double
        break; // ends if no error
    }
    catch (Throwable t) { // on error
        System.out.println("NaN"); // not a number
    }
}

コメントからこれが何をすることになっているのかを見ることができます。

しかし、数字ではないものを入力すると、次のようになります。

Please type a value: abc
NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN

強制的に停止するまで続けます。

Pythonでは、これを実行します。

while True:
    try:
        n = float(raw_input("Please type a value: "))
        break
    except Exception:
        print "NaN"

Javaでこれを行うにはどうすればよいですか?を使用してみましたdo while

4

4 に答える 4

2

ブロック内のnextLine()メソッドを呼び出しcatchます。

このスキャナーを現在の行を超えて進め、スキップされた入力を返します。このメソッドは、最後の行区切り記号を除いて、現在の行の残りを返します。位置は次の行の先頭に設定されます。

このメソッドは、行区切り文字を探して入力を検索し続けるため、行区切り記号が存在しない場合は、スキップする行を検索するすべての入力をバッファリングする場合があります。

 catch (InputMismatchException t) { // on error
    userInput.nextLine();
    System.out.println("NaN"); // not a number
  }
于 2012-09-05T10:04:30.967 に答える
1
while (true) { // forever loop
    try {
        scanner userInput = new Scanner(System.in); 
        System.out.print("Please type a value: "); // asks user for input
        double n = userInput.nextDouble(); // gets user input as a double
        break; // ends if no error
    }
    catch (Throwable t) { // on error
        System.out.println("NaN"); // not a number
    }
}

whileループ内でスキャナークラスを使用する必要があります。そうすると、指定された入力値が間違っている場合にのみ、次の入力値を要求されます。

于 2012-09-05T10:04:49.987 に答える
0

これを試して、

double n;
boolean is_valid;

do {
    try {
        System.out.print("Please type a value: ");
        Scanner kbd = new Scanner(System.in);
        n = kbd.nextDouble();
        is_valid = true;
    } catch (Exception e) {
        System.out.println("NaN"); 
        is_valid = false;
    }
} 
while (!is_valid);
于 2012-09-05T10:10:46.330 に答える
0

上記のように、次のように変更できます。

    Scanner userInput = new Scanner(System.in);
    while (true) { // forever loop
        try {
            System.out.print("Please type a value: "); // asks user for input
            double n = userInput.nextDouble(); // gets user input as a double
            break; // ends if no error
        }
        catch (Throwable t) { // on error
            System.out.println("NaN"); // not a number
            userInput.nextLine();
        }
    }
于 2012-09-05T10:51:34.010 に答える