如何将类传递到方法中并根据类的参数返回布尔值



我在使用两个类对象并返回布尔值的方法时遇到问题。我知道在我的 if 语句的每个条件中都需要一个返回语句,一个返回 false,另一个返回 true。IM面临的问题是每个对象在10x10多维数组网格上都有一个(i,j(坐标。当两个对象具有相同的 (i, j( 时,游戏应该结束。

这是我遇到问题的方法。它接收生物 c1 和生物 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);

您可以重写 Creature 类中的 isEqual 方法,以自定义类的比较方式。

在这种情况下,您似乎需要比较每个类的 I 和 J 位置。

然而,仅仅因为它们的位置而认为这些生物"平等"有点奇怪。他们还是不一样的!

也许在你的生物类中定义一个方法,例如:

public Boolean hasSamePositionAsCreature( Creature other )
{ 
   if( other.I == this.I && other.J == this.J )
   {
       return true
   }
   return false
}

当您在两个对象上使用 == 时,您的比较引用不是值。

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;
}

你不能使用 == 进行对象比较,这将检查对象的地址而不是它们的内容。

为了比较两个对象,您需要覆盖类中的 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)

最新更新