2014-12-17 2 views
0

오늘 나는 데이터로 가득 찬 파일에서 가장 저렴한 피자를 찾는 새로운 프로그램을 만들고 있습니다. 나는 완전히 하나의 문제에 붙어있어, 그것은 compareTo 메서드를 사용하고 있습니다. 내 리소스 클래스에서 만들었지 만 이중 참조가 취소 될 수 없다는 오류가 발생하지는 않습니다.이 문제를 보았지만 여전히 도움이되지 않았습니다. 나는 가장 진보 된 프로그래머가 아니며 다른 리소스에 대한 많은 복잡한 대답을 이해하지 못합니다. 프로그램의 내 사양은 다음과 같습니다.두 배로 compareTo 메서드 [더블 참조 할 수 없습니다.]

B. CheapPizza.java a. Objective - Pizza.java에 Comparable 인터페이스를 구현합니다. b. 할당 - 10 장에 복사 한 Pizza.java 파일을 사용하십시오. Comparable 인터페이스를 구현하고 compareTo() 메소드를 추가하십시오. 이 compareTo()는 을 사용하여 pizza.txt에서 가장 저렴한 피자를 찾는 데 도움이됩니다. Pizza.java의 새 버전을 테스트하기 위해 CheapPizza.java 클라이언트 클래스를 작성하십시오. CheapPizza는 파일에서 피자를 읽고 compareTo() 메서드를 사용하여 가장 저렴한 피자를 추적합니다. 가장 싼 피자를 보관할 피자 개체와 피자 개체 을 만들어 파일에서 피자를 읽습니다. compareTo()를 사용하여 가장 저렴한 피자와 피자를 파일에서 비교합니다. 파일에서 읽은 피자가 더 저렴한 경우 피자를 가장 저렴한 것으로 변경하십시오. a. 칠판에 pizzas.txt 파일을 입력하십시오. b. 출력 - 형식으로 정확히 표시해야한다은 다음과 같습니다 : 가장 싼 피자를 다음 compareTo 메소드 내 코드의 하단에위한 9 인치 올리브 피자 $ 7.99

코드를 비용, 누군가가 나에게 설명해주십시오 수 있습니다 내가 뭘 잘못하고 있니? 좋은 시간 보내 줘서 고마워! ~

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'는'double' 인 프리미티브와 함께 사용하지 마십시오. 직접 비교해보십시오. '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는 객체의 메소드입니다. 그래서 double 대신에 Double 객체를 사용하거나 간단하게 산술 연산을 사용할 수 있습니다.

+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

아니요. 또한 'Pizza' 클래스의 메소드이기 때문에 private 변수에 액세스 할 수 있습니다. – Marv

+0

아, 그렇게 될 것 같습니다. 내 실수 –

2

당신은 비용에 따라 피자를 분류하는 피자 클래스

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)에 java.lang.Comparable 인터페이스를 구현해야합니다.

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

이 새로운 데이터 정렬 방법을 알려 주셔서 감사합니다. 고맙습니다! –