2017-11-02 6 views
1

スキャナの入力がintであるかどうかをチェックし、ユーザがintを入力するまでerrormessageをループするメソッドを作成しようとしています。以下の方法は、usserが1つ以上の間違った入力を与えない限り長く働きます。私が複数の文字を入力してintを入力すると、プログラムがクラッシュします。私はそれが1つの例外をキャッチするキャッチしようとするには何かを持っているかもしれないと思うが、確かではない、そしてそれを働かせるように見える。誰も私がこれをどのように修正できるか知っていますか?NumberFormatException 2つ以上の「間違い」の後に、catch catch recursionが機能しない

方法で呼び出す:

System.out.println("Write the street number of the sender: "); 
int senderStreetNumber = checkInt(sc.nextLine); 

方法:再帰の

public static int checkInt (String value){ 
    Scanner sc = new Scanner(System.in); 
    try{ 
    Integer.parseInt(value); 
    } catch(NumberFormatException nfe) { 
    System.out.println("ERROR! Please enter a number."); 
    value = sc.nextLine(); 
    checkInt(value); 
    } 
    int convertedValue = Integer.parseInt(value); 
    return convertedValue; 
} 
+0

再帰を使用して、ネストされた呼び出しの結果を無視するためのあなたの理由は何ですか? – Tom

+0

私はコーディングにかなり新しいことを認めなければなりません。どうすればいいかわかりません。 – sodapunk

+0

[NumberFormatExceptionとは何ですか?どうすれば修正できますか?](https://stackoverflow.com/questions/39849984/what-is-a-numberformatexception-and-how-can-i-fix-it) – xenteros

答えて

0

このようなものです。脳からキーボードまで、IDEでコード化しませんでした。 希望します。パトリック

Scanner sc = new Scanner(System.in); 

int senderStreetNumber; 
boolean ok = false; 

while(!ok) { 
    System.out.println("Write the street number of the sender: "); 
    try { 
     senderStreetNumber = Integer.parseInt(sc.nextLine()); 
     ok = true; 
    } catch (NumberFormatException nfe) { 
     System.out.println("ERROR! Please enter a number."); 
    } 
} 
+0

を書き直そうとしています!手伝ってくれてどうもありがとう – sodapunk

0

あなたのロジックが良くありません。あなたがrecurciveしない場合

は )の値がintである場合は、「チェックあなたが機能で取得する最初の時間

...私はあなたのエラーを説明してみましょう。 が二度目があるとしましょう良い。 あなたは変換された値 を返します。その後、再起動が始まり、最初にあなたが復帰します。 変換された値が再び変換され、その例外をキャッチしないので、アプリケーションがクラッシュします

+0

ああ、わかりました。うん、私はそれを正しく使用していないと伝えることができました、あなたのawnserに感謝します。私が必要とするものに対して正しく使用する方法はありますか?または別の方法を使用することをお勧めしますか? – sodapunk

+0

良い値を得てその値を返すまでwhileループかdoを実行します – DeadPool

+0

ありがとうございました。私は再帰が何であるか誤解していると思います。実際にうまく機能したメソッド – sodapunk

-1
This works.., just modified your program..tested 

public static int checkInt(String value) { 
     Scanner sc = new Scanner(System.in); 
     try { 
      return Integer.parseInt(value); 
     }catch (Exception e) { 
      System.out.println("Error please enter correct.."); 
      value = sc.nextLine(); 
      return checkInt(value); 
     } 
     //int convertedValue = Integer.parseInt(value); 
     //return convertedValue; 
    } 
関連する問題