以下代码应从.dat文件中读取5个字符串,然后从每个字符串中打印每个字符。
File file = new File("tictactoe.dat");
Scanner scan = new Scanner(file);
String str = "";
int x;
for ( x = 0; x < numGames; x++) {
str = scan.nextLine();
for (int i = 0; i < str.length(); i++) {
out.println(str.charAt(i));
}
}
但该程序会抛出StringIndexOutOfBoundsException
。 Scanner
没有任何问题,因为测试表明它可以很好地获取我文件中的每一行。但是当试图获取然后在每个字符串中打印某个字符时,程序崩溃了。
奇怪的是,循环charAt()
之外的工作没有错误。
为什么在循环中调用方法会导致程序崩溃?
更新:我在复制我正在使用的代码时犯了一些荒谬的错误。请参阅上面的更新代码。此外,该计划&#34;崩溃&#34;由于StringIndexOutOfBoundsException
,我没有抓到。
答案 0 :(得分:1)
我希望错误为StringIndexOutOfBoundsException
,因为您要打印第一行的第一个字母和第二行的第二个字母,等等。因为您不检查是否存在这样的字母,有一点,这条线不长。
如果那不是原因我会
答案 1 :(得分:1)
你的行数混乱,每行的字符数
File file = new File("tictactoe.dat");
Scanner scan = new Scanner(file);
String str = "";
int x;
int y;
for ( x = 0; x < numGames; x++) {
str = scan.nextLine();
for (y = 0; y<str.length(); y++)
{
out.println(str.charAt(y));
}
}
答案 2 :(得分:0)
你的逻辑中有些奇怪。假设DAT是:
12345
67890
abcde
fghij
klmno
您的代码将打印出来:
1
7
c
i
o
毕竟,你调用“scanLine”numGames次,并抓住每一行的X位置。
答案 3 :(得分:0)
你的循环没有做你想做的事。你说:
...然后打印每个字符串中的每个字符。
但它实际上做的是获得第1行,并且只打印该行的第一个字符,然后获得第二行并打印第二个字符,第三行和第三个字符,依此类推。如果您在一个单独的行上打印每个字符,则需要在第一个字符内部使用第二个循环来遍历字符串中的字符,以便打印所有单个字符。
char[] characters = str.toCharArray();
for (int i = 0; i < characters.length; i++) {
System.out.println(characters[i]);
}
甚至更好,如果你使用for-each循环:
for (char c : str.toCharArray()) {
System.out.println(c);
}