0

私は本当にこの問題について知りません...

数値が正しくない場合、ブロックは例外をキャッチします。-1または0を入力すると、例外がキャッチされ、数値を再度入力するように求められます...しかし、asdasdのようなものを入力すると、無限ループが実行されます。

while (true){

            try{

                System.out.println("-Size of the array: ");        
                size = read.nextInt();      

                if(size<=0){

                    throw new Exception();

                }else{

                    break;    

                }


            }            
            catch(Exception e){

                System.out.println("\n-Wrong input. Try again.\n");

            }    

        }
4

4 に答える 4

2

スキャナーの初期化をwhileループ内に配置します。

while (true){

        try{
            Scanner read = new Scanner(System.in);
            System.out.println("-Size of the array: ");        
            size = read.nextInt();      

            if(size<=0){

                throw new Exception();

            }else{

                break;    

            }


        }            
        catch(Exception e){

            System.out.println("\n-Wrong input. Try again.\n");

        }    

    }
于 2012-10-15T05:53:29.347 に答える
2

おそらく、これに対処する最善の方法は、読者が次の行を取得できるように変更することです。

String input = read.nextLine();
if(input.length() == 0) { continue; }

try{
    size = Integer.parseInt(input);
} catch(NumberFormatException e){ throw new Exception(); }
于 2012-10-15T05:25:26.043 に答える
0

「asdasd」は整数ではないため、 read.nextInt が例外をスローしていると思います。これにより、例外ハンドラが実行され、メッセージが出力されます。ただし、例外ハンドラーに「ブレーク」がないため、ループが再び実行されます...何度も...

于 2012-10-15T05:39:24.130 に答える
0

投げてキャッチしているので、捕まってしまうのではないかと思いますException。catch plockに追加e.printStackTrace();すると、発生することを予期していない例外をキャッチしていることに気付くでしょう...nextInt()呼び出しからの例外、または NPE などです。

  • 投げないでくださいException。決して。標準的な例外が適切でない場合は、独自の例外を作成して、特定の例外を使用します。

  • Exceptionすべての可能性に対処する準備ができていない限り、キャッチしないでください。これには、コード内のランダムなバグが原因である予期しない未チェックの例外がすべて含まれます。

于 2012-10-15T06:16:40.993 に答える