Java charAt()方法在For循环中崩溃

时间:2012-09-26 16:10:19

标签: java file input

以下代码应从.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));
    }
}

但该程序会抛出StringIndexOutOfBoundsExceptionScanner没有任何问题,因为测试表明它可以很好地获取我文件中的每一行。但是当试图获取然后在每个字符串中打印某个字符时,程序崩溃了。

奇怪的是,循环charAt()之外的工作没有错误。

为什么在循环中调用方法会导致程序崩溃?

更新:我在复制我正在使用的代码时犯了一些荒谬的错误。请参阅上面的更新代码。此外,该计划&#34;崩溃&#34;由于StringIndexOutOfBoundsException,我没有抓到。

4 个答案:

答案 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);
}