我有一个二维数组,其中每个单元格都是一个Set。 在每个集合中有不同的大小,例如,范围从0到5。
我想以一种易于阅读的格式打印出2-D数组。
实施例
HashSet<String>[][] schedule = (HashSet<String>[][]) new HashSet[3][5];
schedule[0][0].add("A");
schedule[0][0].add("B");
schedule[0][0].add("C");
schedule[0][2].add("D");
schedule[0][2].add("E");
schedule[1][0].add("F");
schedule[1][1].add("G");
schedule.print();
将产生
-----------------
| A | | D | | |
| B | | E | | |
| C | | | | |
-----------------
| F | G | | | |
-----------------
| | | | | |
-----------------
显然没有' - '和'|',但你明白了。
我能想到的唯一可行的解决方案是为每列创建和记住迭代器(这样同时记住5个迭代器)并迭代每个列,一次输出一个元素,直到任何元素都没有迭代器。
一个问题是,在G的情况下,即使第一行,第二列中没有任何值,它也会扩展第二列。我可以通过使用标签缓冲每一列来解决这个问题。
显然这个黑客不会扩展额外的列,所以我想知道是否有任何我可能忘记的可爱技巧。
谢谢!
答案 0 :(得分:0)
对代码进行一些修改(你忘了实例化数组中的位置!),你绝对可以打印出锯齿状的集合。
提示:使用iterator()
提供的HashSet
方法。迭代器移动一组对象,一次返回一个,然后暂停直到它再次被调用,或者没有任何东西可以迭代。您可以在Wikipedia's Iterator article找到有关迭代器的更多信息。
使用它,你可以在String中的每个HashSet中收集结果(以你想要的任何方式),并在最后打印出来。
代码段:
Iterator first = schedule[0][0].iterator();
Iterator second = schedule[0][2].iterator();
// And so forth
String firstResult = "";
String secondResult = "";
// And so forth
while (first.hasNext()) {
firstResult += first.next() + "\t";
if (!first.hasNext()) {
firstResult += "\n";
}
}
while (second.hasNext()) {
secondResult += second.next() + "\t";
if (!second.hasNext()) {
secondResult += "\n";
}
}
// And so forth
System.out.print(firstResult + secondResult + someResult + anotherResult);
填补空白是读者的一项练习。
有了这个,结果如下:
A B C
D E
F
G