1

您好,我正在尝试编写一个 Java 比较,它采用名为 MovieCard 的当前对象并将其与作为参数传递的另一个 MovieCard 进行比较。下面的代码

boolean sameName(MovieCard movieCard) {

    if(this.MovieCard.equals(movieCard))


    return true;
} 

错误找不到符号 - 变量 MovieCard

如果这有什么不同,检查会在我的类中列在 MovieCard 构造函数之前。另外我在初学者编程课上,所以我们不能使用 Comparator 并且它需要包含它。

4

6 回答 6

2
boolean sameName(MovieCard movieCard) {
    return this.equals(movieCard);
} 
于 2013-10-23T06:52:14.997 回答
1

你必须写

boolean sameName(MovieCard movieCard) {
 if (this.equals(movieCard)){
            return true;
        } else{
            return false;
        }
}

因为this.MovieCard 指向您Moviecard班级中的一个变量。

除了您的语法错误之外,您的 equals 实现除了默认实现之外什么也不做

请记住 ,只有当and 指向相同的引用if (this.equals(movieCard)){ 时,这才是正确的。movieCardthis

因为,

java.lang.Objectequals()提供的类的默认实现比较内存位置,并且仅当两个引用变量指向相同的内存位置时才为真,即本质上它们是相同的对象。return

我猜你需要在你的MovieCard类中重写 equals 方法,这样比较的字段MovieCard's是否相同。

喜欢阅读,如何本质上Ovveride等于。

您正朝着错误的方向前进,请参阅上面链接中的示例,然后以这样的方式实现等于,即如果 MovieCardequals中的所有字段都与传递的对象的字段相同。那将是您要求的实施。

一般来说,一个比较两个 Tiger 对象的例子是这样的

 

@Override
  public boolean equals(Object object) {
    boolean result = false;
    if (object == null || object.getClass() != getClass()) {
      result = false;
    } else {
      Tiger tiger = (Tiger) object;
      if (this.color == tiger.getColor() //checking color and pattern same
          && this.stripePattern == tiger.getStripePattern()) {
        result = true;
      }
    }
    return result;
  }
于 2013-10-23T06:54:45.900 回答
1

MovieCard是一个类,而不是一个变量。这就是编译器告诉你的。

if(this.MovieCard.equals(movieCard))
        ↑

您可能只需要编写this.

另请注意,存在不返回任何内容的路径,这将无法编译。

你应该做:

boolean sameName(MovieCard movieCard) {
    return this.equals(movieCard);
}

或者

boolean sameName(MovieCard movieCard) {
    if(this.equals(movieCard)) {
       return true;
    }
    return false;
} 
于 2013-10-23T06:51:11.353 回答
1

如果您的课程中存在此方法MovieCard,那么this就足够了。

boolean sameName(MovieCard movieCard) {
    if(this.equals(movieCard)) {// this is enough. this.MovieCard is wrong, as there is no variable by that name.
        return true;
    }
    return false; // Since return true is a conditional return, but the method needs to return in any case.
}

您的方法的缩短版本将是

boolean sameName(MovieCard movieCard) {
    return this.equals(movieCard); // Returns the result of the comparison.
}

如果查看方法名称,sameName()看起来您想要比较类中的某个名称字段,而不是对象本身。

boolean sameName(MovieCard movieCard) {
    return this.getName().equals(movieCard.getName()); // Returns the result of the name comparison.
    // But there is a possible NPE in the above statement.
}
于 2013-10-23T06:51:15.667 回答
1

使用喜欢

boolean sameName(MovieCard movieCard) {
    if(this.equals(movieCard))
       return true;
} 

但是您的方法似乎是检查两个对象是否具有相同的名称。如果是这样,那么您可以简单地使用

boolean sameName(MovieCard movieCard) {

    if(this.name.equals(movieCard.name))
         return true;
} 

假设名称是成员变量(字符串)

于 2013-10-23T06:51:41.480 回答
0

上面给出的所有答案都回答了你的问题,所以我也想补充一下。

请记住,equals调用的方法属于对象方法。因此,明智的做法是覆盖该equals方法以满足程序的需求。并且当您覆盖 equals 时,请确保您也覆盖该hashcode方法..

于 2013-10-23T07:02:31.713 回答