1

我正在编写一个从文本文件中扫描的单词搜索程序。文本文件包含两个整数(拼图的尺寸,在本例中为 10x10),然后是拼图,然后是另一个整数(要查找的单词数量),最后是要查找的单词。我正在尝试编写代码,以便程序将执行一个 for 循环,该循环将扫描下一行,然后将字符串中的每个字符添加到 2D 数组中。然而,扫描仪似乎继续通过文件并最终在文件上“越界”,即使根据 for 循环,它应该运行不超过 10 次(拼图的尺寸为 10x10)

这是有问题的代码:

Scanner scan = new Scanner(new File("puzzle.txt"));
    int rows = scan.nextInt();
    int columns = scan.nextInt();   
    int [][] wordSearch = new int[rows][columns];

    for (int i = 0; i < rows; i++){
        for (int j = 0; j < columns; j++){
            String temp = scan.nextLine();
            for (int k = 0; k < temp.length(); k++){
                wordSearch[i][j] = temp.charAt(k);

              }
            }
        }

这是拼图.txt:

  • 10 10
  • 垂直呼叫
  • ROOAFFLSAB
  • 阿克里利亚托阿
  • NDODKONWDC
  • 德克苏德克
  • OEEPZEGLIW
  • 微华埃拉
  • ALRKRRIRER
  • KODIDEDRCD
  • 赫尔斯劳特
  • 10
  • 星期
  • 寻找
  • 随机的
  • 侦探
  • 落后
  • 垂直的
  • 对角线
  • 维基百科
  • 水平的
  • 词搜索
4

1 回答 1

3

然而,扫描仪似乎继续通过文件并最终在文件上“越界”,即使根据 for 循环,它应该运行不超过 10 次(拼图的尺寸为 10x10)

不,看看你的循环:

for (int i = 0; i < rows; i++){
    for (int j = 0; j < columns; j++){
        String temp = scan.nextLine();

您正在为每一行每一列运行它。我怀疑你实际上想要:

for (int i = 0; i < rows; i++) {
    String temp = scan.nextLine();
    for (int j = 0; j < columns; j++) {
        wordSearch[i][j] = temp.charAt(j);
    }
}

当然,这假设您已将每行的长度正确设置为列数 - 您可能希望在阅读该行后验证这一点。

应该引起怀疑的一件事是这个内部循环:

for (int k = 0; k < temp.length(); k++) {
    wordSearch[i][j] = temp.charAt(k);
}

这将为 中的wordSearch[i][j]每个字符覆盖相同的内容temp,使除最后一次迭代之外的所有迭代都毫无意义。

于 2012-09-27T21:00:11.480 回答