【问题标题】:Comparing two object with int and string parameters in Java在 Java 中将两个对象与 int 和 string 参数进行比较
【发布时间】:2023-04-04 11:55:01
【问题描述】:

我正在尝试比较同一类中同时包含 String 和 Int 参数的两个对象。

这是我的实验室作业,我尝试仅使用 .equals 方法而不覆盖它,但没有奏效,我对如何比较两个对象的 String 和 Int 参数进行了更多研究。所以我构建了一个覆盖 equals 并且它只适用于我测试每个参数时的 String 参数,Int 参数一直返回为 True,所以我不确定我哪里出错了。

已更新 好的,现在我开始工作了,我试图弄清楚如果名称不同,或者团队名称不同,则返回 false。我想过使用 if 和 else 但嵌套 if-else?

//This is my equals method to compare the String and Int parameter.
public boolean equals(Object o)
   {
       Player comp = (Player) o;
       if (o == this) {
           if (comp.team.equals(this.team)) {
               return true;
           } else if (comp.jerseyNumber == this.jerseyNumber) {
               return true;
           }

       }else
           return false;
   }
//And this is the method that calls on Player.
      player1.readPlayer();
//Prompt for and read in information for player 2
       player2.readPlayer();
//Compare player1 to player 2 and print a message saying
//whether they are equal
       if (player1.equals(player2))
       {
           System.out.println("Same Players");
       }else
       {
           System.out.println("Different Players");
       }

所以我认为,如果姓名、球队和球衣号码相同,我希望结果打印为相同的球员,或者如果三者不同,则打印出不同的球员。相反,无论 Int 参数值如何,所有三个参数都会打印为 Same player,当我将 Int 参数变灰时,它实际上显示了相同和不同的玩家结果。

【问题讨论】:

  • 好的,现在我开始工作了,我试图弄清楚如果名称不同,或者团队名称不同,则返回 false。我想过使用 if 和 else 但嵌套 if-else?
  • 你说if (o == this)--想一想这句话的意思。
  • 好吧,我会调用 Object o 来与 this 进行比较,这是类的参数,对吧?我不擅长术语
  • 您实际上是在说if (other object is the same object as this object),在这种情况下,结果是instatrue。 (对了,你还需要看看你尝试player.equals("not a player")时会发生什么。)
  • 我修好了,好像是这样java public boolean equals(Object o) { if (o == this) return true; Player comp = (Player) o; if (!comp.team.equals(this.team)) return false; if (comp.jerseyNumber != this.jerseyNumber) return false; else return true; }

标签: java


【解决方案1】:

您在平等检查中进行了自我比较:

Player comp = (Player) o;
if (comp.team.equals(this.team))
    return true;
if (comp.jerseyNumber == ((Player) o).jerseyNumber) <== RIGHT HERE
    return true;

我假设你是有意的:

if (comp.jerseyNumber == this.jerseyNumber)

根据comp 变量,我猜你提取了演员表但错过了一个,然后在审核时有点忙。

编辑:我还建议使用快速退出,就像这样 - 否则,如果球队相同,但球衣不同,那么你今天的方式会说他们是同一个人:

Player comp = (Player) o;
if (!comp.team.equals(this.team))
    return false;
if (comp.jerseyNumber != this.jerseyNumber)
    return false;
return true;

【讨论】:

  • 哦,有趣的是我想到了尝试 java jerseyNumber == this.jerseyNumber 并且它有效,但我认为这更好,并确保它会检查 comp.jerseyNumber。
  • 谢谢! :D 这对我有用,我仍然在布尔逻辑上挣扎并将其应用于编码,部分原因是我自己没有练习太多,但我编码的动力有点小,我真的想提高我的技能跨度>
猜你喜欢
  • 2019-07-26
  • 2020-07-31
  • 2020-07-16
  • 1970-01-01
  • 2016-07-10
  • 2012-07-01
相关资源
最近更新 更多