2012-05-03 15 views
4

私はファイルリーダーの作成に取り組んでいます。ユーザーがテキストファイルの行番号を表す数値を入力するようにしています。この番号を保持する変数の型はintです。しかし、ユーザがStringを入力すると、JavaはInputMismatchException例外をスローし、ユーザが有効値、すなわちintを入力するまでループするcatch句にループを設定します。スケルトンは次のようになります:try-catchブロックのJavaループ -

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 
    } 
} 

私の質問は、検証を行う可能性のある技術は何ですか? ありがとうございます。

答えて

3

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

それは、このような単純なのです:

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 
} 
+0

ありがとうございます。これは動作しますが、 'catch'節のプロンプトの後に余分なString ___ = __。nextLine()を追加する必要がありました。 –

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 
     } 
    } 
+3

このブール変数を使用する必要はありません。 'while(true)'を使い、データが正しく読み込まれたときにサイクルを中断してください。 Yargで – Yarg

+0

同意7 ながら、(真){ 試し{ //行番号を入力するようユーザーに求め //キーボード から数を取得する//数 ブレークで何かを行います。ユーザが有効な入力に入るまで }キャッチ(InputMismatchException電子){ は//私はループしたい 上記ステップが達成されると私はどちらかのソリューションを試みた場合、私はここで } } –

+0

別のメソッドを呼び出してい//、I無限ループを持つ。私が探していたのは、番号自体を検証する方法です。私は数値のASCII値を取得することを考えていましたが、適切な範囲外の場合はループを続けます。 –

2

あなたは方法isNumericException

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 
    } 
} 

を避けることができます:あなたが入力番号のためのダイアログを使用したい場合は

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

String input = JOptionPane.showInputDialog("Input a number:"); // show input dialog 
+0

ありがとうございました! –