为了账号安全,请及时绑定邮箱和手机立即绑定

Java制作数字文件的二维列表对象

Java制作数字文件的二维列表对象

慕村225694 2023-02-16 17:03:13
我在一个文件中有一个数字金字塔12 33 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();    }编辑:我添加的最后一行是 [1, 2, 3, 3, 4, 5] 而不是 [3, 4, 5] 因为 s.hasNextInt() 在迭代时始终为真,所以 while(in.hasNextLine ()) 只运行一次
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

快速浏览一下,我会说这里的这一行是你的问题:rows.clear();

你的rows变量仍然指向它在你添加它之前指向的同一个列表,columns所以如果你清除它,那么你所做的就是将一个空添加ArrayListcolumns.

替换这一行:

rows.clear();

有了这个:

rows = new ArrayList<>();

这样,rows变量仍然指向一个空的、全新的ArrayList,但它ArrayList之前指向的变量是独立的。


查看完整回答
反对 回复 2023-02-16
?
12345678_0001

TA贡献1802条经验 获得超5个赞

一种简单的方法是hasNextLine()用 anextLine()和字符串拆分替换循环。


所以你会用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();

}


查看完整回答
反对 回复 2023-02-16
  • 2 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信