4

私はファイル リーダーの作成に取り組んでおり、テキスト ファイルの行番号を表す番号をユーザーに入力させるというアイデアがあります。この数値を保持する変数の型はintです。ただし、ユーザーが代わりに aを入力すると、Java は例外をStringスローします。私が望むのは、ユーザーが有効な値、つまり an を入力するまでループする句にループを含めることです。スケルトンは次のようになります。 InputMismatchExceptioncatchint

 public void _____ throws IOException {
    try {
    // Prompting user for line number
    // Getting number from keyboard
    // Do something with number
    } catch (InputMismatchException e) {
       // I want to loop until the user enters a valid input
       // When the above step is achieved, I am invoking another method here
    }  
}

私の質問は、検証を行うことができるいくつかの可能な手法は何ですか? ありがとうございました。

4

3 に答える 3

4
while(true){ 
   try { 
        // Prompting user for line number 
        // Getting number from keyboard 
        // Do something with number 
        //break; 
       } catch (InputMismatchException e) { 
            // I want to loop until the user enters a valid input 
            // When the above step is achieved, I am invoking another method here 
       } 
   } 
于 2012-05-03T04:13:55.993 に答える
3

フロー制御に例外を使用しないでください。例外をキャッチしますが、メッセージのみを出力します。また、ループ内に for ループが必要です。

次のように簡単です。

public void _____ throws IOException {
    int number = -1;
    while (number == -1) {
        try {
            // Prompt user for line number
            // Getting number from keyboard, which could throw an exception
            number = <get from input>;
        } catch (InputMismatchException e) {
             System.out.println("That is not a number!");
        }  
    }
    // Do something with number
}
于 2012-05-03T04:54:18.873 に答える
2

を回避できます。Exception

Scanner sc = new Scanner(System.in);
while(sc.hasNextLine())
    String input = sc.nextLine();
    if (isNumeric(input) {
        // do something
        // with the number
        break; // break the loop
    }
}

方法isNumeric:

public static boolean isNumeric(String str) {
    return str.matches("^[0-9]+$");
}

入力番号のダイアログを使用する場合:

String input = JOptionPane.showInputDialog("Input a number:"); // show input dialog
于 2012-05-03T04:58:40.293 に答える