我在一个文件中有一个数字金字塔
我正在尝试使用文件中的数字填充2D Arraylist。我试图先填充数字行,然后将该行添加到列中,但是我找不到正确的输入测试来完成该操作。
ArrayList<Integer> rows = new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> columns = new ArrayList<ArrayList<Integer>>();
try {
Scanner s = new Scanner(new File("1.txt"));
//while (s.hasNext()) {
String a = s.next();
String b = s.next();
s.nextLine();
while(s.hasNextLine()) {
while(s.hasNextInt() ) {
// I want to say while( has more lines is true )
// ( create a row of ints and append it to columns
rows.add(s.nextInt());
}
columns.add(rows);
rows.clear();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
edit:我要添加的最后一行是[1、2、3、3、4、5]而不是[3、4、5],因为s.hasNextInt()在迭代时始终为true, 所以while(in.hasNextLine())只运行一次
答案 0 :(得分:1)
快速浏览一下,我会说这是您遇到的问题:rows.clear();
您的rows
变量仍然指向将其添加到columns
之前指向的列表,因此,如果清除它,则只需添加一个空的{{1 }}到ArrayList
。
替换此行:
columns
与此:
rows.clear();
这样,rows = new ArrayList<>();
变量仍然指向空的全新rows
,但是之前指向的ArrayList
却被保留了。
答案 1 :(得分:0)
一种简单的方法是将hasNextLine()
循环替换为nextLine()
并进行字符串分割。
因此,您可以将循环替换为nextLine()
ArrayList<Integer> row;
ArrayList<ArrayList<Integer>> columns = new ArrayList<ArrayList<Integer>>();
try {
Scanner s = new Scanner(new File("1.txt"));
while (s.hasNextLine()) {
String[] temp = s.nextLine().split(" ");
row = new ArrayList<Integer>();
for(String i : temp) ints.add(Integer.parseInt(i));
columns.add(row);
}
}
catch (FileNotFoundException e) {
e.printStackTrace();
}