所以,我有这个。它比较了两个卡片组,如果它们相同,则结果为真。
public boolean equals ( Object obj ) {
boolean result = true;
for (int i = 0; i < 52; i++) {
if (this.cardAt(i) = this2.cardlist(i)) {
result = true;
} else {
result = false;
}
}
}
如果愿意,我希望能够比较两个随机卡片组。 但我不知道如何使用“这个来比较两个不同的。 我只是写了“this2”来替换“this”的另一个实例。 我怎么能取代这个“this2”仍能比较两张卡片?
答案 0 :(得分:4)
obj
是您的this2
考虑这种改编:
public boolean equals ( Object obj) {
if(!obj instanceof Deck) return false; // make sure you can cast
Deck otherDeck = (Deck)obj // make the cast
for (int i = 0; i < 52; i++) {
if (!this.cardAt(i).equals(otherDeck.cardAt(i)) // use .equals() instead of ==
return false; // return false on the first one that's wrong
}
return true;
}
你的旧方法会有缺陷。假设有一张4张牌组: {4S,3C,5D,AH} 还有另外4张卡片组 {4S,10C,5D,AH}
走过他们
result = true
current index 0... compare 4S to 4S... good, so...
result = 4S == 4S ? true
result = 3C == 10C ? false
result = 5D == 5D ? true
result = AH == AH ? true
因此,您的方法仅测试LAST卡是否正确。 (当你完成它时它永远不会回来!)
答案 1 :(得分:0)
您可以将obj强制转换为您当前所在类的类型,如此
MyClass other = (MyClass)obj;
// Now do calculations using other instead of this2.
答案 2 :(得分:0)
public boolean equals ( Object obj )
{
boolean result = false; // No need of result variable
for (int i = 0; i < 52; i++) {
if (this.cardAt(i) == obj.cardlist(i)) // not = , it should be ==
{
return true;
}
}
return false;
}
编辑1:但是,此逻辑不会遍历整个cardlist
。只测试相应的卡片是否相同。如果找到至少一个匹配,它将返回剩余的卡片进行比较,否则遍历整个列表。