2016-11-25 4 views
-1
try 
     { 
      n = s.nextLine(); 
      a = s.nextInt(); 
     } 
     catch(Exception e) 
     { 
      System.out.println("do u really want to come out? Write True or False"); 
      boolean c = s.nextBoolean(); 
      } 

このコードをデバッグすると、正確に何をしたいのですか?しかし、私はそれを実行するときdoes notはs.nextboolean(これはスキャナ(java.util.Scanner)のオブジェクトです。私は入力を取得するために使用しています)。例外が発生したときにそれが印刷されると本当に出て欲しいですか? TrueまたはFalseを書き込みますが、例外を出力してコードをクラッシュします。それは私に真偽を入力させません、それはちょうどクラッシュit.tコードでは、intを要求し、あなたが出てくるはずなので、それは不一致の例外を与える文字列を与える。tryとcatchを使用すると、コードがまだクラッシュします。

+2

あなたが無効な入力を得ると、あなたはそれを消費していません。 'nextLine()'なので 'nextBoolean()'を試しても無効な入力を読み込もうとしています。 –

+1

@PeterLawreyそれも私が考えていたものです。 @artechhelpので、 'nextBoolean()'の前に 'nextLine()'を追加してください。ありがとう。 – Logan

+0

私はnextlineが文字列を入力したいと思ったらそれを作ったと思った? – artechhelp

答えて

0

整数値に「FRED」と入力してEnterキーを押します。あなたの入力ストリームは、次のようになります。

FRED\n

s.nextInt()を入力ストリームの最初の文字が整数ではないので、それはInputMismatchExceptionをスローして、任意の文字を消費しない見つけました。だからあなたの入力ストリームは、まだ次のようになります。

FRED\n

あなたはs.nextBoolean()を呼び出し、そして再び、InputMismatchExceptionが上昇しました。今回は、try { ... }ブロック内にいません(catchブロック内にあります)。例外が伝播してプログラムを終了します。

代わりに、s.nextLine()のようなものを呼び出すことによって、入力ストリームの入力不良をクリアする必要があります。この時点で

catch (Exception e) { 
    s.nextLine(); // Consume the current line of bad input 
    System.out.println("Write True or False"); 
    boolean c = s.nextBoolean(); 
} 

は、不正な入力が消費されており、ユーザーは s.nextBoolean()コールによって消費された "真" で入力することができます。

F R E D \n True\n

関連する問題