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()
扫描仪功能的问题吗?或者是其他东西?什么是解决它的最佳方法?
我需要帮助。欢迎任何建议,意见或想法。谢谢
答案 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;