2016-08-27 10 views
-6

上記コードはです。しかし私がsc.hasNext()を使用すると、それは動作します。どうして?while(true)とwhile(new Scanner(System.in).hasNext)の違いは何ですか?

Scanner sc = new Scanner(System.in); 
while(sc.hasNext()){ 

    TreeSet<Integer> set=new TreeSet<Integer>(); 
    int n=sc.nextInt(); 

    for(int i=0;i<n;i++){ 
     set.add(sc.nextInt()); 
    } 

    for(Integer i:set){ 
     System.out.println(i); 
    } 
} 
+3

リンクが開かれていません... –

+1

'while(true)'は、あなたが 'break'または' return'を出さない限り、決して終わりません。 –

+3

あなたのコードをリンクとしてではなく、質問に投稿してください(リンクが機能していても)。 –

答えて

0

あなたが何とかbreakを使用しない限り、基本的に

while(true) { 
    //some code 
} 

は永遠に実行されます。 Scanner scがこれ以上読んだり、あなたがbreakキーワードを使用することは何もないだろうとき

while(sc.hasNext()) { 
    //some code 
} 

は実行を停止します。

+0

はい、あなたは正しいですしかし、なぜそれが境界外のインデックスのようなエラーを引き起こすのでしょうか? – bore2015

+0

'true'と' sc.hasNext() 'のどれも' indexOutOfBoundsException'を引き起こしません。それはあなたのコードのどこかにあるはずです。 [ask]と[mcve]を読んで、別の質問にcode snippet、exception stacktrace(このテキストには多くの情報があります)を入力してください。 – xenteros

+0

@ bore2015あなたは何の入力を得ますか?例外?再生できません – xenteros

関連する問題