2011-12-24 2 views
0

私は各セルがセットである2次元配列を持っています。 各セットのサイズは、たとえば0〜5のように異なります。さまざまなサイズのセルで2D配列を印刷するにはどうすればよいですか?

2次元配列を簡単に読み取れるような形式で出力したいとします。 ' - '

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行目、2列目に値がなくても、2番目の列が展開されるという問題が1つあります。私はタブで各列をバッファリングすることでこれを回避することができます。

明らかに、このハックは追加の列でスケーリングされないので、私は忘れてしまったかもしれないかわいいトリックがあるかどうか疑問に思っていました。

ありがとうございます!

+3

は 'JTable'オプションですか? – trashgod

+0

私はそれをチェックアウトします!ありがとう。 – Calvin

答えて

0

コードを少し変更して(配列の位置をインスタンス化するのを忘れてしまった!)、はっきりとギザギザのセットを印刷することができます。

ヒント:HashSetで提供されているiterator()メソッドを使用してください。イテレータは、オブジェクトのコレクションを移動し、一度に1つずつ戻り、それが再び呼び出されるまで一時停止します。または反復処理が残っていません。イテレータの詳細については、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 
+0

助けてくれてありがとう。私は自分の質問で、各列にイテレータを使用して順番に印刷することをすでに検討していることを述べました。しかし、あなたがちょうど示したように、それは私が描いたようにトップダウンではなく左右にプリントします。また、新しい列があるときは手動でイテレーターを作成することをお勧めします。別の列を追加したい場合、DRYの原則に違反して別のイテレーターを作成する必要があります。 – Calvin

関連する問題