2014-04-24 33 views
-3

這裏我聲明瞭兩個數組列表兩個相等的數組列表,但Java沒有看到等於

ArrayList<Location> possibleMoves = new ArrayList<Location>(); 
possibleMoves.add(new Location(0, 1)); 
possibleMoves.add(new Location(1, 0)); 

ArrayList<Location> possibleMoves1 = new ArrayList<Location>(); 
possibleMoves1.add(new Location(0, 1)); 
possibleMoves1.add(new Location(1, 0)); 

其明顯的,那些2名數組列表是相同的,但是當我運行這個檢查它似乎總是失敗。

if(possibleMoves == possibleMoves1){ 
    System.out.println("lol"); 
} 

我也嘗試這樣做,它沒有

assertTrue("Player 1 1st piece could play to the left and down!", 
arrayListsEqual(possibleMoves, possibleMoves1)); 

這是arrayListsEqual

private boolean arrayListsEqual(ArrayList<Location> a, ArrayList<Location> b) { 
    if (a.size() != b.size()) { 
     return false; 
    } 
    int size = a.size(); 
    boolean thisOneFound = false; 
    for (int i = 0; i < size; i++) { 
     thisOneFound = false; 
     for (int j = 0; j < size; j++) { 
      if (a.get(i).equals(b.get(j))) { 
       thisOneFound = true; 
       break; 
      } 
     } 
     if (!thisOneFound) { 
      return false; 
     } 
    } 
    return true; 
} 
+0

使用equals,而不是'==' –

+0

在哪個庫中定義了'arrayListsEqual'? –

+0

@Duncan它在由課程 – user3567826

回答

0

的方法請閱讀==equals之間的差異。 ==檢查兩個引用是否引用相同的實例,而equals測試是否相等。看看question的答案。

4

2個問題:

  1. 「位置」 的對象是不同的實例。所以他們完全不相關的對象。
  2. 該列表本身是不同的實例。

第一:你需要使用「等於」列表的方法來檢查的平等:

list1.equals(list2). 

也,你需要確保你保存的同一對象的列表(使用相同的實例)或者在「Location」類中實現「equals」和「hashmap」方法。

一旦完成它應該工作。

好運:)

+0

我明白這一點,但不幸的是,我不能修改這個 assertTrue(「玩家1的第一塊可以玩到左側和下降!」, arrayListsEqual(possibleMoves,possibleMoves1)); 它在由教授創建的測試文件中給出,所以我應該使這個工作與assertListsEqual – user3567826

+2

@ user3567826在這種情況下,您唯一的要求是在您的位置實現'equals()'和'hashCode' '班。 –

+0

@Duncan你是對的!它愚蠢的我想念這個!謝謝,我想當你保持清醒2天的工作,你錯過了小東西:D – user3567826

0

你不能比較==參考對象,ArrayList的不是原始數據類型。