首页 > 解决方案 > 在 Java 中打印 2D ArrayList 会导致空括号

问题描述

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

所以想法是将每 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);

我已经检查了其他关于如何创建 2D ArrayList 的 SO 帖子,所以我很确定我从 for 循环中得到了所有内容。当我lines在将 ArrayList 添加到之前测试打印 ArrayList 时lines2D,它会打印所需的结果(例如 [cat, dog]),所以至少在那之前我是正确的。

我也不确定是否w.println(list2D)是正确的打印方法,但我再次看到使用此方法的多个其他 SO 帖子。

感谢任何帮助/批评,谢谢。

标签: javaarraysarraylistprintingfile-io

解决方案


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

那是因为你只有一个 ArrayList。

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

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

不需要“lineNum”变量。

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


推荐阅读