0

さまざまな Scanner メソッドがどのように機能するかについて明らかな何かが欠けているに違いありませんが、これは実際には意味がありません。

このコードは無限ループを引き起こします:

Scanner valueScan = new Scanner(line);
valueScan.useDelimiter(",");
while(valueScan.hasNext())
{
count++;
}

このコードは有効ですが:

Scanner valueScan = new Scanner(line);
valueScan.useDelimiter(",");
while(valueScan.hasNext())
{
System.out.println("value token: " + valueScan.next());
cellCount++;
}

これは、Oracle のドキュメントからのものです。適用されるかどうか、または意味するかどうかはわかりません。 .com/javase/1.5.0/docs/api/java/util/Scanner.html#next%28%29)

4

4 に答える 4

4

hasNextから何も削除しないため、Scanner最初のケースでは状態を変更しないため、無限ループになります。 nextは入力を抽出するため、 の状態を変更しScannerます。

于 2012-04-08T19:59:45.073 に答える
0

2番目の例での呼び出しvalueScan.next()は、スキャナーを前進させるものです。hasNext()スキャナーに次のアイテムがあることを確認するだけで、他には何もしません。したがって、少なくとも1つのアイテムがある場合は無限ループになります。

于 2012-04-08T20:00:01.553 に答える
0

next()意地悪なScanner繰り返しなし。

于 2012-04-08T20:00:06.117 に答える
0

hasnext次の要素が存在するかどうかだけを通知nextし、その要素に移動します。

したがって、最初のループでは、最初の要素に留まり、2番目の要素が存在し、それ以上何もしないことを通知し続けます。

于 2012-04-08T20:01:35.997 に答える