我遇到了一个接受两个类对象并返回一个布尔值的方法的问题。我理解我需要在if语句的每个条件中都有一个return语句,一个返回false而另一个返回true。面临的问题是每个对象在10x10多维阵列网格上具有(i,j)坐标。当两个对象具有相同的(i,j)时,游戏应该结束。
这是我遇到麻烦的方法。它接受Creature c1和Creature c2并返回一个布尔值。我会在这个方法中加入什么?
public static boolean sameSquare(Creature c1, Creature c2) {
// if c1 and c2 have identical (i, j) coordinates, return true
// else return false
c1 = Creature(human);
c2 = Creature(vampire);
if (c1 == c2) {
return true;
System.out.println("you bit the human");
}else {
return false;
}
}
对此方法的调用如下所示
sameSquare(human, vampire);
人类和吸血鬼对象的创建如下:
System.out.print("Enter (i, j) for vampire: ");
int newI = input.nextInt();
int newJ = input.nextInt();
Creature vampire = new Creature('V', newI, newJ);
System.out.print("Enter (i, j) for human: ");
int humanI = input.nextInt();
int humanJ = input.nextInt();
Creature human = new Creature('H', humanI, humanJ);
答案 0 :(得分:0)
您可以覆盖Creature类中的isEqual方法,以自定义类的比较方式。
在这种情况下,您似乎想要比较每个班级的I和J职位。
然而,仅仅因为他们的位置而认为这些生物“平等”有点奇怪。他们仍然不同!
也许在你的生物类中定义一个方法,如:
public Boolean hasSamePositionAsCreature( Creature other )
{
if( other.I == this.I && other.J == this.J )
{
return true
}
return false
}
答案 1 :(得分:0)
当您在两个对象上使用==时,您的比较引用不是值。
c1 = Creature(human);
c2 = Creature(vampire);
c1 == c2 // Will always be false!!
您需要覆盖Creature类中的equals方法。
@Override
public boolean equals(Object o) {
// You might also want to verify that o is an instance of Creature
if (! (o instanceof Creature))
return false;
Creature other= (Creature) o;
// Write logic to check if they are in the same cell
if (this.i == other.i && this.j == other.j)
return true;
else
return false;
}
答案 2 :(得分:0)
您无法使用 == 进行对象比较,这将检查对象的地址而不是其内容。
为了比较两个对象,您需要在类中重写 equals 方法,然后进行适当的检查并相应地返回布尔值。在您的情况下,等于方法将是:
public boolean equals(Creature obj){
if(obj!=null &&(this.i==obj.i && this.j==obj.j))
return true
else
return false;
}
现在您可以比较两个对象,如下所示:
c1.equals(c2)