Java compareTo问题

时间:2013-04-03 13:19:48

标签: java

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

进行比较

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果Object是你要定义的某种类,那么使它有一个可以与interger比较的值,如果它真的是Java的Class“Object”,就没有办法进行这样的比较。

答案 2 :(得分:0)

您正在尝试将int值与object进行比较。您需要将r转换为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;
    }
}

答案 3 :(得分:0)

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

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

int compareTo(Object r) {


        if(newR==area) {

            return 0;
        }

        if (newR>area) {

            return 1;
        }
        else {

            return -1;
        }

    }

答案 4 :(得分: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()));
  }