0

switch case オプションの番号を読み取ろうとしていますが、例外が発生してスタックしています。コードで問題をよりよく説明しようとします。

do{
    try{
        loop=false;
        int op=teclado.nextInt();
        //I tryed a teclado.nextLine() here cause i saw in other Q but didn't work
    }
    catch(InputMismatchException ex){
        System.out.println("Invalid character. Try again.");
        loop=true;//At the catch bolck i change the loop value
    }
}while(loop);//When loop is true it instantly go to the catch part over and over again and never ask for an int again

int を入力すると完全に機能しますが、例外により最初からやり直されます。2 回目は、プログラムは int を要求せず (バッファーである可能性があり、C のようなものが必要だと思いますfflush(stdin))、バッファーは狂ったように書き込みを開始します。

4

1 に答える 1

1

失敗した場合に入力を取得するために、Scannerfrom 内で新しいインスタンスを作成することをお勧めします。catch 編集:失敗したときに a を 使用しScanner.nextLine()て、改行文字を超えて進めることができます。do...whileループは、少なくとも 1 回実行されることが保証されるため、これには不適切な場合があります。

さらに役立つ可能性のある構造は、単純なwhileループです。これは実際にはwhile-true-break一種のループであり、有効な入力で中断します。

while(true) {
    try {
        op=teclado.nextInt();
        break;
    } catch(InputMismatchException ex){
        System.out.println("Invalid character. Try again.");
        teclado.nextLine();
    }
}
于 2012-04-28T05:09:21.593 に答える