2015-02-16 3 views
-2
public class Item implements Comparable 
{ 
    private String name, category; 
    private int quantity; 
    private double price; 

    public Item(String nam,String cate,int quant,double pric) 
    { 
     name = nam; 
     category = cate; 
     quantity = quant; 
     price = pric; 
    } 

    public String toString() 
    { 
     return name + ", " + category + ", " + quantity + ", " + price; 
    } 

    public boolean equals(Object other) 
{ 
    if (price == ((Item)other).getPrice()) 
    return true; 
    else 
    return false; 
} 


    public String getName() 
    { 
     return name; 
    } 

    public String getCategory() 
    { 
     return category; 
    } 

    public int getQuantity() 
    { 
     return quantity; 
    } 

    public double getPrice() 
    { 
     return price; 
    } 

    public int compareTo(Object other) 
    { 
     int result; 

     String otherPrice = ((Item)other).getPrice(); 
     String otherCategory = ((Item)other).getCategory(); 

     if (price.equals(otherPrice)) //Problem Here 
      result = category.compareTo(otherCategory); 
     else 
      result = price.compareTo(otherPrice); 
     return result; 
    } 
} 

------------------------------- 

в пунктах // проблема здесь. Я получаю ошибку компиляции, говоря, что удвоения не могут быть разыменованы. Я понимаю, что двойники имеют примитивный тип, но я до сих пор не совсем понимаю, как их использовать в методе compareTo. Итак, после переопределения метода equals, как его использовать в методе compareTo? Я хочу сначала сравнить цена. Если цена равна otherPrice, Категория необходимо сравнить следующим образом.double не может быть разыменован для equals и compareTo (java)

+0

Пожалуйста, используйте тег языка для определения языка – horns

+1

Dealing с примитивами в методах, таких как '' compareTo' и equals' требует использования своих объектных сопоставлений (например, «Двойной» для парных разрядов). Вы можете автоматически использовать атрибуты autobox/unbox в/из своих типов объектов. Будьте осторожны при сравнении удвоений ... так как «равенства», как правило, очень трудно достичь, просто используя «==». –

+0

Кроме того, boo для сравнения удвоений с 'equals' (или' == ') и использования их для валюты. – vanza

ответ

-1

Equals(), как определено сравнивает стоимость деталей, поэтому строка должна гласить:

if (this.equals(other)) 
Смежные вопросы