代码之家  ›  专栏  ›  技术社区  ›  Kevin

在Java中打印2D ArrayList会得到空括号

  •  0
  • Kevin  · 技术社区  · 3 年前

    我试图读取一个文件,并将每两行放入字符串的ArrayList中。我的程序有一个计数器,它从1开始并跟踪行,如果它在第2行,它将执行以下操作:

    • 添加名为的字符串的ArrayList 线 转换为名为的二维数组列表 list2D
    • 清除 线 使用 .clear()
    • 将线路计数器重置为1

    因此,我们的想法是将每2行文本存储为字符串的2D ArrayList。以下是预期的输入文件和预期的输出:

    INPUT FILE: cat
    dog
    mouse
    duck (every word is on a different line idk why SO put it on the same line)
    
    OUTPUT: [[cat, dog],[mouse, duck]]
    

    但是,当我使用以下命令打印2D ArrayList时 w.println(list2D) ,程序输出空:

    [ [ ], [ ] ]
    

    这是我的代码:

    ArrayList<ArrayList<String>> list2D = new ArrayList<ArrayList<String>>();
    ArrayList<String> lines = new ArrayList<String>();
    
    Integer lineNum = 1;
    
    for (String line = r.readLine(); line != null; line = r.readLine()) {
        lines.add(line);
        if (lineNum == 2) { //line counter is at the end of block
            list2D.add(lines);
            lines.clear();
            lineNum = 1; //reset line counter
        } else {
            lineNum++;
        }
    }
    w.println(list2D);
    

    我查过了 other SO发布了关于如何创建2D ArrayList的帖子,所以我很确定我从for循环中得到的一切都是正确的。当我测试打印时 lines 将ArrayList添加到之前 lines2D ,它会打印出所需的结果(例如[猫,狗]),所以至少在那之前我是正确的。

    我也不确定 w.println(list2D) 是正确的打印方法,但我也看到过其他多篇使用这种方法的SO帖子。

    任何帮助/批评都很感激,谢谢。

    1 回复  |  直到 3 年前
        1
  •  0
  •   camickr    3 年前

    程序输出空:[[],[]]

    这是因为你只有一个ArrayList。

    您多次将该ArrayList的引用添加到2D ArrayList中,但ArrayList中没有数据,因为您添加了两个条目,然后清除了这些条目。

    您需要为每两行文本创建一个新的ArrayList。

    不需要“lineNum”变量。

    您只需在ArrayList中添加一行文本。当ArrayList的大小为2时,您将其添加到2D ArrayList中,并为接下来的2行文本创建一个新的空ArrayList。