我试图创建一个程序,从jfilechooser读取文本文件,然后将其转换为2dint数组。文本文件可能如下所示:
000000
000000
001110
011100
000000
我需要该文件能够读取不确定的行和列的txt文件。这是我尝试过的代码,但是当这种情况发生时,我的gui什么也不做,它会中断并且在关闭时不再退出。
为了澄清,我希望每个单个数字(1或0)作为数组的一个元素打印,并且希望文件的每一行都是数组中的一行。
try {
File file = new File(String.valueOf(fc.getSelectedFile()));
Scanner reader = new Scanner(file);
cols = reader.nextLine().length();
while (reader.hasNextInt()) {
size++;
}
rows = size / cols;
int[][] iBoard = new int[rows][cols];
while (reader.hasNextInt()) {
for (int i = 0; i < iBoard.length; i++) {
for (int j = 0; j < iBoard[0].length; j++) {
iBoard[i][j] = reader.nextInt();
}
}
}
reader.close();
} catch (FileNotFoundException q) {
q.printStackTrace();
}
3条答案
按热度按时间jw5wzhpr1#
我是这样做的。
数组.txt
qv7cva1a2#
如前所述,最好使用整数的2d arraylist来完成这类操作(
ArrayList<ArrayList>>
)或整数的二维列表接口(List<List<Integer>>
). 这显然是一种方法,因为您不需要读取数据文本文件两次,一次获取文件中实际数据行的数量,另一次检索数据。通过使用像arraylist或list这样的收集机制,您不需要为它们分配大小,它们可以动态增长。但是,如果您仍然致力于利用二维整数数组(int[][]
)然后你就可以把这个集合转换成那样。下面是我的想法(利用您提供的代码方案):
使用上述方法:
如果数据文件如您所示:
然后控制台窗口的输出将是:
3duebb1j3#
而不是试着读每一个
int
一次,您可以将每一行保存到List<String>
. 然后遍历这个列表,得到每个char
每个的String
把它放到你的二维数组里。