2014-04-24 27 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的不是原始数据类型。