:このスキャナ関連のバグを修正するにはどうすればよいですか?このコードはコンパイルされていても
import java.util.Scanner; // imports the Scanner class from the java.util package
public class ScannerPractice {
public static void main(String args[]) {
Scanner word = new Scanner("word 1 2 3 4"); // creates a new Scanner objecrt with a string as its input
String scaStr = word.nextLine(); // converts scanner to string
String strArr[] = new String[10];
// as long as the scanner has another character...
for (int i = 0; i < scaStr.length(); i++) {
int j = 0;
String k = "";
// if the next token is an integer...
if (word.hasNextInt()) {
j = word.nextInt();
k = String.valueOf(j);
strArr[i] = k;
}
// otherwise, skip over that token
else {
word.next();
}
}
String k = "";
// for each character in charArr
for (int i = 0; i < strArr.length; i++) {
// Accumulate each element of charArr to k
k += " " + strArr[i];
}
System.out.print(k);
}
}
私はこのエラーを取得する:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at ScannerPractice.main(ScannerPractice.java:28)
例外はある、28行を参照:
word.next();
私は私を見て試してみましたforループは値を文字列配列に代入しますが、私はまだエラーを見つけることができませんでした。
私はこれを解決しようとしています。ヒントさえも高く評価されます。
文書によると、スキャナは 'next()'を呼び出してそれ以上のトークンが利用できない場合、それをスローします。まだ入力されていないため利用できません。 –
コードは意味をなさない。なぜなら、トークンを処理できるが、フラットな文字列を反復処理するスキャナを作成するからです。だから、スキャナを使ってトークン化したいのですか、通常の文字列でトークン化したいですか? –
あなたのループに 'scaStr.length()'を使用している場合、何回の繰り返しを繰り返しているか考えてみてください。文字通り文字列からすべてのintをパースしようとしている場合は、 'word.hasNextInt()'を使用して継続したいかどうかを判断できます。 – Dana