2011-12-24 48 views
0

我有一個2-D數組,其中每個單元格都是一個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的情況下,即使第一行第二列中沒有任何值,它也會展開第二列。我可以通過使用製表符緩衝每列來解決這個問題。

很明顯,這個黑客並沒有擴展到其他列,所以我想知道是否有任何可能會忘記的可愛技巧。

謝謝!

+3

是'JTable'的選擇嗎? – trashgod 2011-12-24 00:59:42

+0

我會檢查出來的!謝謝。 – Calvin 2011-12-24 02:19:17

回答

0

通過對代碼進行一些修改(您忘記實例化陣列中的位置!),您肯定可以打印出鋸齒狀的集合。

提示:利用HashSet提供的iterator()方法。迭代器遍歷一組對象,一次返回一個對象,然後暫停,直到再次調用它,或者沒有剩下的迭代。你可以在Wikipedia's Iterator article找到更多關於迭代器的信息。

使用此功能,您可以收集每個HashSet中String的結果(以您希望的任何方式)的結果,並在最後打印出來。

代碼段:

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 
+0

感謝您的幫助。我在我的問題中提到,我已經在考慮對每一列使用迭代器,並按順序打印出來。然而,正如你剛纔所展示的那樣,它將它們左右打印,而不是像我一樣從上到下打印。另外,對於我來說,每當有新列時手動創建一個迭代器並不是好的做法,因爲如果我想添加另一個列,我必須創建另一個迭代器,違反DRY原則。 – Calvin 2011-12-24 22:20:09