2010-03-17 19 views
0

我有一個任務,我可以使用最簡單的方法 - 數組。現在我想進一步使用一些更復雜的Java特性(比如集合)來重做它,但是我從來沒有使用過比2d矩陣更復雜的任何東西。我應該看什麼以及如何開始。塔應成爲一個集合?這裏的任務:使用集合重寫數組

我們有兩個班級 - 塔和塊。塔從塊建造。 安德這裏的示例代碼進行測試:

Block k1=new Block("yellow",1,5,4); 
Block k2=new Block("blue",2,2,6); 
Block k3=new Block("green",3,4,2); 
Block k4=new Block("yellow",1,5,4); 

Tower tower=new Tower(); 
tower.add(k1,k2,k3); 

"Added 3 blocks." 

System.out.println(tower); 

"block: green, base: 4cm x 3cm, thicknes: 2 cm 
block: blue, base: 6cm x 2cm, thicknes: 2 cm 
block: yellow, base: 5cm x 4cm, thicknes: 1 cm" 

tower.add(k2); 

"Tower already contains this block." 

tower.add(k4); 

"Added 1 block." 

System.out.println(tower); 

"block: green, base: 4cm x 3cm, thicknes: 2 cm 
block: blue, base: 6cm x 2cm, thicknes: 2 cm 
block: yellow, base: 5cm x 4cm, thicknes: 1 cm  
block: yellow, base: 5cm x 4cm, thicknes: 1 cm" 

tower.delete(k1); 

"Deleted 1 block" 

tower.delete(k1); 

"Block not in tower" 

    System.out.println(tower); 

"block: blue, base: 6cm x 2cm, thicknes: 2 cm 
block: yellow, base: 5cm x 4cm, thicknes: 1 cm  
block: yellow, base: 5cm x 4cm, thicknes: 1 cm" 

比方說,我會把塔爲塊的集合。如何在整個集合中執行特定塊的搜索?或者我應該使用其他接口?

+0

難道這是預期的輸出? – OscarRyz 2010-03-17 19:06:10

+0

是的。在「」這是這個示例測試代碼的輸出。 – owca 2010-03-17 19:49:51

回答

2

您可以使用防止重複元素的集合Set。如果您嘗試添加已存在的元素,它將返回false

Set<Block> set = new HashSet<Block>(); 

boolean added = set.add(k1); 
if(added) { 
    System.out.println("Added 1 block."); 
} else { 
    System.out.println("Tower already contains this block."); 
} 

要知道該集合是否已經包含元素,該類應該正確實現equals()方法。

爲了提供描述信息,你可以覆蓋toString()方法和迭代集:

for(Block b : set) { 
    System.out.println(b); // invokes b.toString() 
} 
1

如果你的Tower類有一個成員變量是一個集合(Set似乎適合你的要求,不允許重複),那麼你可以提供與你的數組實現相同的訪問器。

然後你會保留你的域和模型的塔和磚。你也可以隱藏客戶端的內部數據結構的實現,你不需要完全實現一個集合接口,其中可能包括你實際上不需要的方法。

1

你可以使用一個Set

使用Set,您不需要搜索重複項(我假設這就是爲什麼需要搜索功能),因爲使用add(E)方法會返回一個標誌,指示是否存在重複項。