在Java中,为什么nextInt()不检索此文本文件中的每个数字?

时间:2015-05-10 16:33:07

标签: java matrix int java.util.scanner

  public GameofLife(int gen)
  {
   generations = gen; 
   life = new boolean[20][20];
   try {
      Scanner pablo = new Scanner(new File("life100.txt"));
      pablo.nextInt(); //eliminate 100 (number of files in the list)
      while (pablo.hasNextInt())
          {
            life[pablo.nextInt()][pablo.nextInt()] = true;
          }
        } catch(Exception e){}
     out.print(Arrays.deepToString(life));
    }

我正在尝试从文本文件中读取100对int坐标中的数组,但由于某种原因,此设置不会获得每个数字;它在第3行读取后停止。 文本文件位于设置

100
1    3
1    7
1    8
1   11
1   12
1   17
2    1
2    5
2    8
3    7
3   13
3   16
3   20
4    1
4    5
4   15
4   17

并且一直到19 18.然而当我用out.print(Arrays.deepToString(life));打印它时,第三行之后的每个位置都是假的,而我正在设置它以便每一对坐标都在文本文件在矩阵中以true开头。

这是我nextInt()扫描仪功能的问题吗?或者是其他东西?什么是解决它的最佳方法? 我需要帮助。欢迎任何建议,意见或想法。谢谢

1 个答案:

答案 0 :(得分:2)

如果这是实际的文件内容,当您在3 20中读取[3][20]时没有life分配时,您看起来超出了数组的范围,它只会去到[3][19]

您的try / catch块会遮挡ArrayIndexOutOfBoundsException,这会让您感到困惑。正如评论所暗示的那样,打印堆栈跟踪是一种比什么都不做更好的默认捕获行为,这会很快发现这个错误。

尝试将e.printStackTrace();放入catch块以查看我正在谈论的内容。

由于Java数组从0开始编制索引,如果您的文件包含从1到20的行+列位置,则需要先将文件中的值减去1,然后再将其添加到数组中,例如

life[pablo.nextInt() - 1][pablo.nextInt() - 1] = true;