2011-03-28 75 views
0

我一直在試圖製作一些方法,它們將通過至少4種不同方式對鏈接列表進行排序。不過,我不斷收到編譯器錯誤Java - 嘗試使用自定義比較器對LinkedList進行排序,無法找到符號類型

MyBikeList.java:80: cannot find symbol 
symbol : method sort(java.util.List<Bike>,Comparator<Bike>) 
location: class java.util.Collections 
       Collections.sort(bikeInventory, byYear); 

我的代碼如下(這不是完整的)

public class MyBikeList implements BikeList 
{ 

    List<Bike> bikeInventory = new LinkedList(); 
    public static Comparator<Bike> byPrice = new PriceComparator(); 
    public static Comparator<Bike> byYear = new YearComparator(); 
    public static Comparator<Bike> byModel = new ModelComparator(); 
    public static Comparator<Bike> byReg = new RegComparator(); 

    public boolean add(Bike bike) 
    { 
    { 

    } 

    public boolean remove(Bike bike) 
    { 
    } 

    public Bike find(String regNo) 
    { 
     ListNode itr = header.next; 

     while(itr != null && !itr.element.equals(Bike.bikeRegNO)) 
     { 
      itr = itr.next; 
     } 

     return new LinkedListIterator(itr); 
    } 

    public int sortByRegNo() 
    { 
     Collections.sort(bikeInventory, byReg); 
     return byReg.getCount(); 
    } 

    public int sortByPrice() 
    { 
     Collections.sort(bikeInventory, byPrice); 
     return byPrice.getCount(); 

    } 

    public int sortByModel() 
    { 
     Collections.sort(bikeInventory, byModel); 
     return byModel.getCount(); 

    } 

    public int sortByYear() 
    { 
     Collections.sort(bikeInventory, byYear); 
     return byYear.getCount(); 

    } 
    public void clear() 
    { 
     bikeInventory.clear(); 
    } 

    public int size() 
    { 
     int s = bikeInventory.size(); 
     return s; 
    } 
} 



    import java.util.*; 

public interface Comparator<T> 
{ 

    int compare(T o1, T o2); 
    int getCount(); 
} 

    import java.util.*; 

public class PriceComparator implements Comparator<Bike> 
{ 

    private int count; 


    public int compare(Bike b1, Bike b2) 
    { 
     int b1Pr = b1.getPrice(); 
     int b2Pr = b2.getPrice(); 

     if(b1Pr > b2Pr) 
     { 
      count++; 
      return 1; 
     } 
     if(b1Pr == b2Pr) 
     { 
      return 0; 
     } 

     return -1; 
    } 

    public int getCount() 
    { 
     return count; 
    } 
} 

import java.util.*; 

public class YearComparator implements Comparator<Bike> 
{ 

    private int count = 0; 

    public int compare(Bike b1, Bike b2) 
    { 
     int b1Yr = b1.getYear(); 
     int b2Yr = b2.getYear(); 


     if(b1Yr > b2Yr) 
     { 
      count++; 
      return 1; 
     } 
     else 
     if(b1Yr == b2Yr) 
     { 
      return 0; 
     } 

     return -1; 
    } 

    public int getCount() 
    { 
     return count; 
    } 

} 

import java.util.*; 

public class RegComparator implements Comparator<Bike> 
{ 

    private int count; 


    public int compare(Bike b1, Bike b2) 
    { 
     String b1Reg = b1.getRegNo(); 
     String b2Reg = b2.getRegNo(); 

     int result = b1Reg.compareTo(b2Reg); 

     if(result > 0) 
     { 
      count++; 
      return 1; 
     } 
     if(result == 0) 
     { 
      return 0; 
     } 

     return -1; 
    } 

    public int getCount() 
    { 
     return count; 
    } 

} 

import java.util.*; 

public class ModelComparator implements Comparator<Bike> 
{ 

    private int count; 

    public int compare(Bike b1, Bike b2) 
    { 
     String b1Model = b1.getModel(); 
     String b2Model = b2.getModel(); 

     int result = b1Model.compareTo(b2Model); 

     if(result > 0) 
     { 
      count++; 
      return 1; 
     } 
     if(result == 0) 
     { 
      return 0; 
     } 

     return -1; 
    } 

    public int getCount() 
    { 
     return count; 
    } 
} 

public class MyBike implements Bike 
{ 

    private String bikeModel; 
    private String bikeRegNo; 
    private String bikeYear; 
    private String bikePrice; 
    private int counter; 

    public MyBike (String model, String regNo, String year, String price) 
    { 
     bikeModel = model; 
     bikeRegNo = regNo; 
     bikeYear = year; 
     bikePrice = price; 
     counter = 0; 
    } 


    public String getModel() 
    { 
     return bikeModel; 
    } 

    public String getRegNo() 
    { 
     return bikeRegNo; 
    } 

    public int getYear() 
    { 
     int aYear = toInt(bikeYear); 
     return aYear; 
    } 

    public int getPrice() 
    { 
     int aPrice = toInt(bikePrice); 
     return aPrice; 
    } 

    public void setPrice(int newPrice) 
    { 

     bikePrice = "" + newPrice; 
    } 

    public int getCompCount() 
    { 
     int tempInt = counter; 
     counter = 0; 
     return tempInt; 
    } 

    public boolean match(String model, int year, int price) 
    { 
     boolean nearMatch = false; 
     int pricePercent = getPrice() /10; 
     if(model != null) 
     { 
      nearMatch = true; 
     } 

     if((year > 0) && (year >= getYear() -1) && (year <= getYear() + 1)) 
     { 
      nearMatch = true; 
     } 

     if((price > 0) && (price >= getPrice() - pricePercent) && (price <= getPrice() + pricePercent)) 
     { 
      nearMatch = true; 
     } 

     if(nearMatch == true) 
     { 
      counter++; 
     } 

     return nearMatch; 


    } 

    public String toString() 
    { 
     String aString = ("" + getPrice() + " " + getYear() 
           + " " + getRegNo() + " " + 
           getModel()); 
     return aString; 
    } 

    public int toInt(String s) 
    { 
     int anInt = Integer.parseInt(s); 
     return anInt; 
    } 

    public int compareTo(Bike b) 
    { 
     int result = getRegNo().compareTo(b.getRegNo()); 
     if (result < 0) 
     { 
      return -1; 
     } 
     if (result == 0) 
     { 
      return 0; 
     } 

     return 1; 

    } 

    public void compare(Bike b) 
    { 
    } 

} 


public interface Bike extends Comparable<Bike> 
{ 
    /** 
    * Get the bike's model description 
    * @return the model 
    */ 
    public String getModel(); 

    /** 
    * Get the bike's registration number 
    * @return the regNo 
    */ 
    public String getRegNo(); 

    /** 
    * Get the bike's year of registration 
    * @return the year 
    */ 
    public int getYear(); 

    /** 
    * Get the bike's price 
    * @return the price 
    */ 
    public int getPrice(); 

    /** 
    * Set the bike's price 
    * @param price the price 
    */ 
    public void setPrice(int price); 

    /** 
    * Get & reset the comparison counter value 
    * @return the count (before resetting to zero) 
    */ 
    public int getCompCount(); 

    /** 
    * Check for "near match" (see assignment brief for details) 
    * @param model ignore if null/empty, else match as substring, 
    * if substring is engine size e.g. "800cc", remove number substring 
    * and convert to a number and match to within 50 
    * @param year ignore if <= 0, else match to within 1 yr 
    * @param price ignore if <= 0, else match to within 10% 
    * @return true if "near match" as above, else false 
    */ 
    public boolean match(String model, int year, int price); 

    /** 
    * Create a string with price, year, regNo & model description 
    * concatenated in that order, separated by single tabs 
    * @return a printable string as above 
    */ 
    public String toString(); 
} 
    public interface BikeList 
{ 
    /** 
    * Add a given bike object to the list 
    * @param bike the bike object to add 
    * @return true if successful, else false 
    */ 
    public boolean add(Bike bike); 

    /** 
    * Remove a bike object from the list 
    * @param bike the bike object to remove 
    * @return true if successful, else false 
    */ 
    public boolean remove(Bike bike); 

    /** 
    * Find a bike given its registration number 
    * @param regNo the registration number 
    * @return the bike object, or null if not found 
    */ 
    public Bike find(String regNo); 

    /** 
    * Sort by registration number 
    * @return the number of comparisons 
    */ 
    public int sortByRegNo(); 

    /** 
    * Sort by registration year 
    * @return the number of comparisons 
    */ 
    public int sortByYear(); 

    /** 
    * Sort by price 
    * @return the number of comparisons 
    */ 
    public int sortByPrice(); 

    /** 
    * Sort by model description 
    * @return the number of comparisons 
    */ 
    public int sortByModel(); 

    /** 
    * Clear the list 
    */ 
    public void clear(); 

    /** 
    * Get the size of the list (= number of bikes) 
    * @return the list size 
    */ 
    public int size(); 

    /** 
    * Convert list to single string with \n after each record 
    * @return the string as above 
    */ 
    public String toString(); 

    /** 
    * Get an iterator object to traverse the bike list 
    * @return a java.util.Iterator<Bike> object 
    */ 
    public java.util.Iterator<Bike> iterator(); 
} 

預先感謝您,遺憾的長度,我不知道有多少是重要的。

謝謝!

+1

你爲什麼要重新定義Comparator接口? – 2011-03-28 01:11:08

回答

4

我認爲問題就出在這:

import java.util.*; 

public interface Comparator<T> 
{ 

    int compare(T o1, T o2); 
    int getCount(); 
} 

你定義自己的Comparator接口。相反,你應該擺脫這種接口和使用java.util.Comparator

http://download.oracle.com/javase/6/docs/api/java/util/Comparator.html

+0

擺脫了原始錯誤,但現在我遇到了比較器計數變量值的問題 – user679488 2011-03-28 01:13:49

+1

比較器只應該比較。它不應該算。如果您需要計數,請與分類/比較器分開進行。 – corsiKa 2011-03-28 01:15:07

+0

一般的經驗法則是**如果一個類的定義摘要需要多於一個句子或包含單詞「和」或「也」,那麼可能是拆分類的時候了。** – corsiKa 2011-03-28 01:15:55

相關問題