2013-04-03 2 views
-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 не может сравниться с rJava compareTo issue

+4

Вы не можете выполнять арифметические операции над 'Object's. –

+0

, так как я могу их сравнить –

+0

Вам нужна книга «Head first core java» для чтения. – AmitG

ответ

1

Вы используете == при сравнении объектов. Оператор == сравнивает ссылки, поэтому результат может быть правдой, только если обе ссылки относятся к тому же объекту. Вероятно, вы должны использовать вместо этого equals().

0

Если объект - это какой-то класс, который вы хотите определить, сделать его значением, которое можно сравнить с interger, если оно действительно является классом «Object» Java, нет никакого способа сделать такое сравнение.

0

Вы пытаетесь сравнить значение int с объектом. Вам необходимо отбросить r до площади, а затем сравнить поля области

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

Предполагая, что объект является объектом Integer, то вы можете сделать это: Теперь вы можете сравнить.

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

int compareTo(Object r) { 


     if(newR==area) { 

      return 0; 
     } 

     if (newR>area) { 

      return 1; 
     } 
     else { 

      return -1; 
     } 

    } 
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() предназначен для сравнения двух объектов одного и того же типа (или надтипа), не яблоки с грушей. Если вы пропустите общий параметр, компилятор примет объект как тип сравнения, который в основном бесполезен.

Самая простая реализация будет:

int compareTo(YourType other) { 
    return Integer.valueOf(Area()).compareTo(Integer.valueOf(other.Area())); 
    } 
+0

спасибо человеку :))) –