-2
int Area() {

            int area=iX1*iY1;
            return area;
        }

        int compareTo(Object r) {


            if(r==area) {

                return 0;
            }

            if (r>area) {

                return 1;
            }
            else {

                return -1;
            }

        }

int iX1 和 iY1 只是在程序开头声明的一些变量。我必须int area与提交的参数进行比较r。我得到的问题是area无法与r

4

5 回答 5

1

==在比较对象时使用。运算符比较引用,因此只有当两个引用都引用同一个对象==时,结果才可能为真。您可能应该调用。equals()

于 2013-04-03T13:23:45.167 回答
0

假设该对象是一个 Integer 对象,那么您可以这样做:现在您可以进行比较。

int newR = ((Integer) r).intValue();

int compareTo(Object r) {


        if(newR==area) {

            return 0;
        }

        if (newR>area) {

            return 1;
        }
        else {

            return -1;
        }

    }
于 2013-04-03T13:31:57.907 回答
0

您的代码片段看起来像您想要实现一个类,让我们命名它YourType,其中两个实例可以通过比较计算值(区域)来排序。典型的方法是实现Comparable

class YourType implements Comparable<YourType> {

  private int iX1, iY1;

  ...

  int Area() {
    return iX1*iY1;
  }

  int compareTo(YourType other) {
    int myArea = Area();
    int otherArea = other.Area();
    if (otherArea == area) {
      return 0;
    }
    if (otherArea > area) {
      return 1;
    } else {
      return -1;
    }
  }
}

compareTo() 方法旨在比较两个相同类型(或超类型)的对象,而不是苹果和梨。如果您错过了泛型参数,编译器会假定 Object 作为比较类型,这几乎是无用的。

最简单的实现是:

  int compareTo(YourType other) {
    return Integer.valueOf(Area()).compareTo(Integer.valueOf(other.Area()));
  }
于 2013-04-03T17:33:36.557 回答
0

如果 Object 是你要定义的某种类,让它有一个可以与整数比较的值,如果它真的是 Java 的 Class "Object",就没有办法进行这样的比较。

于 2013-04-03T13:26:08.553 回答
0

您正在尝试将 int 值与对象进行比较。您需要将 r 转换为 Area ,然后比较 area 字段

Area areaObject = (Area)r;
if(areaObject.area == this.area) {
     return 0
}

这段代码还有其他问题。类的声明不能像这样你宁愿写

class Area {
    private int area;
    public Area(int x, int y) {
         area = x * y;
    }
}
于 2013-04-03T13:30:46.590 回答