6

次のコードでスキャンされる番号をユーザーに入力してもらいたい:

scanner.nextInt();

ユーザーが代わりに文字列を入力すると、プログラムはをスローしInputMismatchExceptionます。これは明らかです。ユーザーが整数値を入力するまで、プログラムがユーザーに入力の入力を求めるように例外をキャッチしたいと思います。

Scanner scanner = new Scanner(System.in);
while(true) {
    try {
        System.out.println("Please enter a number: ");
        int input = scanner.nextInt();
        System.out.println(input);
        //statements
        break;
    }
    catch(InputMismatchException | NumberFormatException ex ) {
        continue;
    }
}

このコードは、文字列が入力された場合に無限ループを作成します。

4

3 に答える 3

4

私の問題に対する答えは次のとおりです。

Scanner scanner = new Scanner(System.in);
while(true) {
    try {
        System.out.println("Please enter a number: ");
        int input = scanner.nextInt();
        System.out.println(input);
        //statements
        break;
    }
    catch(InputMismatchException | NumberFormatException ex ) {
        scanner.next();//new piece of code which parses the wrong input and clears the //scanner for new input
        continue;
    }
}
于 2012-08-31T04:54:45.710 に答える
3

ループScanner scanner = new Scanner(System.in);内に入れますwhile

Scanner scanner;
while(true) {    
    try {
        System.out.println("Please enter a number: ");
        scanner = new Scanner(System.in);
        int input = scanner.nextInt();
        System.out.println(input);
        //statements
        break;
    }
    catch(InputMismatchException | NumberFormatException ex ) {
        System.out.println("I said a number...");
    }
}
于 2012-08-30T06:49:19.930 に答える
0

これはどう?

while(true) {    
    try {
        System.out.println("Please enter a number: ");
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();
        System.out.println("\n\nEntered number is : " + input);
        break;
    } catch(InputMismatchException | NumberFormatException ex ) {
        System.out.println("\n\nInput was not a number. Please enter number again : ");
    } catch(Exception e ) {
        System.out.println("\n\nException caught :: " + e);
    }
}

continue構文は不要なので、構文も削除しました。

于 2012-08-30T06:58:59.107 に答える