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

标签 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)); 打印它时,第三行之后的每个位置都是 false,而我将其设置为使文本文件中的每一对坐标在矩阵中都以 true 开头。

这是我的 nextInt() 扫描仪功能的问题吗?或者是其他东西?修复它的最佳方法是什么? 请我需要帮助。欢迎任何建议、评论或想法。谢谢

最佳答案

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

这被您的 try/catch block 所掩盖,该 block 捕获并删除ArrayIndexOutOfBoundsException。正如评论所建议的,打印堆栈跟踪是比不执行任何操作更好的默认捕获行为,这会很快揭示此错误。

尝试将 e.printStackTrace(); 放入 catch block 中,看看我在说什么。

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

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

关于java - 在 Java 中,为什么 nextInt() 不从此文本文件中检索每个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30153840/

相关文章:

java - 为什么此类的compareTo 方法没有将边<A,B> 和<B,A> 返回为同一事物?

java - 查找一个元素或检查它是否存在于数组/列表中?

matlab - 如何在 matlab 中指定范围并相应地执行函数?

c++ - 4x8 位整数到 32 位整数

java - Python 中的 Servlet 等价物?

java - 从抽象类中获取变量

c++ - 在opencv中创建NDWI矩阵

android - 如何正确旋转位图?

go - 如何将字符串转换为值 int128?目前我仅限于 int64

c++ - 与size_t比较,返回int?