2011-09-12 3 views
1

私はの例をJavaで調べる方法、7eを見ています。 ユーザーは、私がどのようにcatch (NoSuchElementException elementException)作品を考え出す苦労を持っているクラスAccountRecord recordクラススキャナとその例外がJavaでどのように協調するかを解明する

AccountRecord record = new AccountRecord(); 
Scanner input = new Scanner(System.in); 
while (input.hasNext()) // loop until end-of-file indicator 
     { 
     try // output values to file 
     { 
      // retrieve data to be output 
      record.setAccount(input.nextInt()); // read account number 
      record.setFirstName(input.next()); // read first name 
      record.setLastName(input.next()); // read last name 
      record.setBalance(input.nextDouble()); // read balance 

     ............................................................. 

     catch (NoSuchElementException elementException) 
     { 
      System.err.println("Invalid input. Please try again."); 
      input.nextLine(); // discard input so user can try again 
     } // end catch 
     } 

のオブジェクトに手動でデータを入力します。 Javaドキュメントによれば、NoSuchElementExceptionこの列挙にそれ以上の要素が存在しない と、EnumerationのnextElementメソッドによってスローされ

あります。

ので、それはまた、ケース型の不一致に例外をスローする理由予想の間、実際に、そのようなrecord.setAccount(input.nextInt())用として、何を入力すると、ユーザーは、いくつかのテキスト文字列を入力?

ありがとうございます!

答えて

1

タイプの不一致の問題については、InputMismatchExceptionをキャッチする必要があります。 NoSuchElementExceptionから継承しているため、はをキャッチしてキャッチします(コードがそのままキャッチして正常に動作します)。私にとっては、これは奇妙な継承の関係です...確かにis-aの関係を表していません。

実際に両方のケースを区別したい場合は、 NoSuchElementExceptionの前にキャッチします。

+0

なぜInputMismatchExceptionはNoSuchElementExceptionを前になるべきか? Java Docの 'public class InputMismatchException extends NoSuchElementException'によると、したがって、2つのクラス間に明確なis-a関係があります。または私は何かを欠いている!ありがとう! – newprint

+1

catchブロックはorderinで評価されるので、 'InputMismatchException'がスローされた場合、より一般的な' NoSuchElementException'ブロックではなく、意図したブロックによってキャッチされます。 –

+1

はい、あなたは継承について正しいです...私が言っているのは、私は、「InputMismatchException」が 'NoSuchElementException'から継承するとは考えていません。 –

1

よくそれぞれ: input.nextInt(); NoSuchElementExceptionをスローすることができる

他の要素が存在しない場合

Scannerオブジェクトは実際には列挙型です。 javadocツールから

Throws:  
InputMismatchException - if the next token does not match the Integer regular expression, or is out of range 

NoSuchElementException - if input is exhausted 

IllegalStateException - if this scanner is closed 
+0

ありがとう!私はドキュメントhttp://download.oracle.com/javase/6/docs/api/java/util/Scanner.htmlを見て、実際にnextXYZ()関数が例外をスローすることを発見しました! – newprint

関連する問題