Java使数字文件的2D列表对象成为

时间:2019-06-24 23:42:19

标签: java

我在一个文件中有一个数字金字塔

  • 1
  • 2 3
    • 3 4 5

我正在尝试使用文件中的数字填充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())只运行一次

2 个答案:

答案 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();
}