2014-09-24 73 views
0

我在java中有一個二維數組。這裏我想檢查一對值的存在。但我一直都是假的。Java 2維整數數組檢查是否存在

int[][] test_use = new int[1][2]; 
test_use[0][0] = 2; 
test_use[0][1] = 6; 
int[][] constraints = new int[1][2]; 
constraints[0][0] = 2; 
constraints[0][1] = 6; 
System.out.println(Arrays.asList(constraints).contains(test_use)); 

你們對這個問題有什麼想法嗎?我怎樣才能正確地檢查它的存在。非常感謝!

+0

它看起來像你對我正在檢查如果數組'test_use'在'contraints'數組中,那不是。也許你應該看看它是否包含「test_use」中的值。 – SpaceCowboy 2014-09-24 16:16:49

+0

@SpaceCowboy是的,但如何檢查2d數組的元素是{2,6}?也許我應該放棄使用循環? – Patrick 2014-09-24 16:18:52

回答

0

你可以使用這樣的功能,在一類自己的喜好來定義:

public bool contains(int[][] container, int[][] isContained){ 
bool miss = false; 
for(int i = 0; i < isContained.length && !miss; i++){ 
    for(int j = 0; j < isContained[i].length && !miss; j++){ 
     if(container.length > i && container[i].length > j){ 
      if(container[i][j] == isContained[i][j]) { 
       continue; 
      } 
     } 
     miss = true; 
    } 
} 

return !miss; 

} 
+0

謝謝,我需要征服我的懶惰寫這種方法。 :) – Patrick 2014-09-24 16:27:44

0

像這樣的東西應該得到你想要的。

System.out.println(Arrays.asList(constraints).contains(test_use[0][1])); 
+0

謝謝,但它仍然返回false。我會放棄,而不是使用for循環.. – Patrick 2014-09-24 16:26:54

1

的contains()方法在Java集合使用每個包含對象的equals()方法,以檢查是否包含比較對象。

數組的equals方法只從Object繼承,它比較對象是否是相同的對象,而不是它們是否在邏輯上等價。

您正在創建2個不同的數組,並將它們與equals()進行比較,它們不是同一個對象,所以它們的equals方法返回false,所以包含返回false。

因此,該打印假太:

System.out.println(new int[]{i,j}.equals(new int[]{i,j})); 

如果你想獲得正確的結果,你可以自己實現的比較:

int[][] arr = new int[1][2]; 
arr[0] = new int[]{2,6}; 
List<int[]> l = Arrays.asList(arr); 
for (int[] check : l) { 
    if(check[0] == 2 && check[1] == 6) { 
     System.out.println(true); 
     return; 
    } 
} 
System.out.println(false); 
+0

謝謝。這是關於contains()和equals()的一個很好和深入的解釋。 – Patrick 2014-09-24 16:37:25