如何使用不同大小的单元格打印2D数组?

时间:2011-12-24 00:37:36

标签: java

我有一个二维数组,其中每个单元格都是一个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的情况下,即使第一行,第二列中没有任何值,它也会扩展第二列。我可以通过使用标签缓冲每一列来解决这个问题。

显然这个黑客不会扩展额外的列,所以我想知道是否有任何我可能忘记的可爱技巧。

谢谢!

1 个答案:

答案 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