2014-12-17 2 views
0

Сегодня я работаю над новой программой, чтобы найти самую дешевую пиццу в файле, полном данных. Я полностью застрял в одном вопросе, но использует метод compareTo. Я создал его в своем классе ресурсов, но я не получаю ошибок, говоря, что двойник не может быть разыменован, я посмотрел этот вопрос и до сих пор не получил никакой помощи. Я не самый продвинутый программист и не понимаю многих сложных ответов на другие ресурсы. Мои спецификации для программы следующие:compareTo Method with Doubles [Double не может быть разыменован]

B. CheapPizza.java a. Цель - реализовать интерфейс Comparable в Pizza.java. b. Назначение. Используйте файл Pizza.java, который вы скопировали в Главу 10. Внесите сопоставимый интерфейс и добавьте метод compareTo(). Этот compareTo() следует использовать , чтобы помочь вам найти самую дешевую пиццу в файле pizza.txt. Напишите клиентский класс CheapPizza.java, чтобы протестировать новую версию Pizza.java. CheapPizza будет прочитал в пицце из файла и будет отслеживать самую дешевую пиццу, используя метод сравнения compareTo(). Создайте объект Pizza для хранения самой дешевой пиццы и объекта Pizza , чтобы прочитать в пицце из файла. Используйте compareTo(), чтобы сравнить самую дешевую пиццу с пиццей , прочитанной из файла. Если пицца, прочитанная из файла, дешевле, замените самую дешевую пиццу . a. Вход - файл pizzas.txt на доске. b. Выход - должен появиться именно в формате показано ниже: Самый дешевый пиццы: 9-дюймовый оливкового пицца будет стоить $ 7,99

Код для метода CompareTo находится в нижней части моего кода, может кто-то пожалуйста, объясните мне что я делаю неправильно? Спасибо за ваше время, отлично провели день! ~

public class Pizza { 
    private int size; 
    private double cost; 
    private String topping; 

    public Pizza(int s, double c, String t) 
    { 
     size = s; 
     cost = c; 
     topping = t; 
    } 
    public Pizza(String t, int s, double c) //.equals Method For Comparing Pizza for ''PizzaMatch'' 
    { 
     topping = t; 
     size = s; 
     cost = c; 

    } 

    public Pizza() 
    { 
     size = 10; 
     cost = 9.00; 
     topping = "Cheese"; 
    } 

    public String toString() 
    { 
     return String.format("%d inch %s pizza will cost $%.2f", size, topping, cost); 
    } 
    public int getSize() 
    { 
     return size; 
    } 
    public void setSize(int s) 
    { 
     size = s; 
    } 

    public double getCost() 
    { 
     return cost; 
    } 
    public void setCost(Double c) 
    { 
     cost = c; 
    } 
    public String getTopping() 
    { 
     return topping; 
    } 
    public void setTopping(String t) 
    { 
     topping = t; 
    } 

    public boolean equals(Object obj) //.equals Method For Comparing Pizza in "PizzaMatch" 
    { 
     if(!(obj instanceof Pizza)) 
      throw new IllegalArgumentException("Parameter must be of Pizza!"); 

     Pizza temp = (Pizza) obj; 

     if (this.topping.equals(temp.topping) && this.size == temp.size && this.cost == temp.cost) 
      return true; 
     else 
      return false; 

    } 
    //============================================================================================ 
    public int compareTo(Object obj){ 
     if(!(obj instanceof Pizza)) 
      throw new IllegalArgumentException 
       ("Parameter must be a Pizza"); 
     Pizza temp = (Pizza) obj; 
     if (this.cost.compareTo(temp.cost) < 0) //this comes 1st 
      return -1; 
     else if(this.cost.compareTo(temp.cost) > 0) //temp comes 1st 
      return 1; 
     else //this and temp are equal 
      return 0; 
    } 
} 
+0

Вы не используете 'compareTo' с примитивами,' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. Просто сравните их напрямую, например. 'this.cost GriffeyDog

+0

Спасибо за информацию! –

ответ

0
 if(!(obj instanceof Pizza)) 
      throw new IllegalArgumentException 
      ("Parameter must be a Pizza"); 
     Pizza temp = (Pizza) obj; 
     return Double.valueOf(this.cost).compareTo(Double.valueOf(temp.cost)); 

стоимость примитивно вдвое. CompareTo - метод в объекте. Таким образом, вы можете использовать двойной объект вместо двойного или вы просто используете арифметическую операцию.

+0

Я ценю помощь, я никогда не учил этому, и я рад, что кто-то смог объяснить это мне! –

2

cost является полем примитивного типа double, и вы не можете вызывать методы (в вашем случае compareTo()) на примитивных типов, только на объектах. Для сравнения двух дублей, просто сравнить их непосредственно

if (this.cost < temp.cost) 
    return -1; 
else if(this.cost > temp.cost) 
    return 1; 
else 
    return 0; 
+0

Это исправит одну ошибку, но они все равно столкнутся с проблемой того, что temp.cost является частной переменной и недоступен методом 'compareTo'. –

+1

Нет, поскольку это также метод класса «Пицца» и, следовательно, может получить доступ к его частным переменным. – Marv

+0

О, я думаю, это возможно. Моя ошибка –

2

Вы должны реализовать java.lang.Comparable интерфейс для пиццы класса

public class Pizza implements Comparator<Pizza> { 
    // Enter other codes 
    // with toString 

    @Override 
    public int compareTo(Pizza o) { 
     return Double.valueOf(this.cost).compareTo(Double.valueOf(o.cost)); 
    } 
} 

Затем используют Collections.sort (listOfPizzas), чтобы разобраться пицц по стоимости.

public static void main(String[] args) { 
    List l = new ArrayList(); 
    l.add(new Pizza(9, 7.99, "Olive Pizza")); 
    l.add(new Pizza(9, 8.99, "Hot & Spicy Chicken Pizza")); 
    l.add(new Pizza(9, 9.99, "Corned Mutton Sensation Pizza")); 
    Collections.sort(l); 
    System.out.println(" " + l.get(0)); 
} 
+0

Спасибо, что сообщили мне об этом новом методе сортировки данных, я ценю это! –

Смежные вопросы