2014-01-19 47 views
-1

我想比較兩個數組。java奇怪的數組比較

我初始化它們:

public static int [][] craftarray = {{0,0,0},{0,0,0},{0,0,0}}; 
public static int [][] stone = {{0,0,0},{0,0,0},{0,0,0}}; 

,當我試圖用它們進行比較:

Inventory.craftarray.equals(Craft.stone) 

它並沒有說他們是平等的,所以我打印出來的陣列。

工藝陣列回來了0,而石頭返回'[[I @ 44ffb2'。

這是怎麼發生的?

回答

5

改爲使用,Arrays.deepEquals(Object[] a, Object[] b)。這將使用Object.equals()方法逐個比較元素,如果遇到新數組,則遞歸地進行比較。

您的代碼無法正常工作的原因是因爲沒有針對數組的equals()的特殊實現。因此,調用equals時,具有相同內容的兩個不同陣列不會導致true

基本上,這是通過使用Arrays.equals()來解決的。這將通過在數組的每個對象上使用equals來進行比較。但是,由於您正在使用數組數組,您將再次遇到同樣的問題。這就是Arrays.deepEquals()進來


情境感知註釋:請注意,我的世界風格各具特色不需要模式是在特定的位置。例如,可以在工作臺上的6個不同位置製作火炬(頂部有煤的火柴)。這意味着deepEquals()不會幫助。我建議你用一些智能算法編寫你自己的方法來完成這項工作。 Here (on github)是我的一個老項目,我在那裏做了同樣的訣竅。看看我寫的equalsRecipe()方法。

+1

感謝Minecraft特定的東西! – thmas