2014-10-22 74 views
0
public class Main {  
    public static void main(String[] args) throws FileNotFoundException { 
     ArrayList<Country> cList = new ArrayList<Country>(); 
     ArrayList choice = new ArrayList(); 
     File inf = new File("src/countrydata.txt"); 
     Scanner scan = new Scanner(inf).useDelimiter("[\t|\n|\r]+"); 
     Scanner s = new Scanner(System.in); 
     int p = 0; 
     double g = 0; 
     while(scan.hasNext()){ 
      cList.add(new Country(scan.next(), scan.nextInt(), scan.nextDouble())); 
     } 

     System.out.print("Would you like in sorted my name(n), population(p) or growth(g): "); 
     String go = s.next(); 
     go = go.toLowerCase(); 
     if(go.equals("n")){ 
      choice.add(go); 
     }else if(go.equals("p")){ 
      choice.add(p); 
     }else if(go.equals("g")){ 
      choice.add(g); 
     } 

     MyUtil.bubbleSort(cList, choice); 

我的错误:(线以上)约束不匹配:用的一般方法冒泡(列表,列表)类型的MyUtil不适用于参数(ArrayList,ArrayList)。推断型国家是不是有界参数的有效替代品> }“推断类型_____不是有界参数的有效替代品”

//Sort Class 

public class MyUtil <E extends Comparable<E>>{ 

    public static <E extends Comparable<E>>void bubbleSort(List<E> list, List choice){ 
     int n = list.size(); 
     boolean swap = true; 
     while(swap){ 
      swap = false; 
      for(int i = 0; i < n-1; i++){ 
       if(list.get(i).compareTo(list.get(i+1)) == 1){ 
        swap(list, i, i+1); 
        swap = true; 
       } 
      } 
     } 
    } 

    public static <E extends Comparable<E>>void swap(List<E> list, int i, int j){ 
     E temp = list.get(i); 
     list.set(i, list.get(j)); 
     list.set(j, temp); 
    } 
} 


public class Country { 
    private String name; 
    private int population; 
    private double growth; 

    public Country(String name, int population, double growth){ 
     this.name = name; 
     this.population = population; 
     this.growth = growth; 
    } 

    public String getName(){return name;} 
    public int getPopulation(){return population;} 
    public double getGrowth(){return growth;} 

    public String toString(){ 
     return name + ", population of " + population + ", with an anual growth of: " + growth + "."; 
    } 

    public int compareTo(Country c, String s){ 
     if(name.substring(0, 1).compareTo(c.getName().substring(0, 1)) > 0){ 
      return -1; 
     }else if(name.substring(0, 1).compareTo(c.getName().substring(0, 1)) == 0){ 
      return 0; 
     }else{ 
      return 1; 
     } 
    } 

    public int compareTo(Country c, int p){ 
     if(population < c.getPopulation()){ 
      return -1; 
     }else if(population == c.getPopulation()){ 
      return 0; 
     }else{ 
      return 1; 
     } 
    } 

    public int compareTo(Country c, double g){ 
     if(growth < c.getGrowth()){ 
      return -1; 
     }else if(growth == c.getGrowth()){ 
      return 0; 
     }else{ 
      return 1; 
     } 
    } 
} 
+0

你能为你的问题选择更好的标题吗? – 2014-10-22 02:21:27

+0

我可以,但我是新来的,我真的不知道该怎么称呼它:/ – 2014-10-22 02:23:08

+0

你甚至不*使用*你的第二个参数;为什么还要去那里? – Makoto 2014-10-22 02:31:25

回答

5

的问题是,你在该行

public static <E extends Comparable<E>>void bubbleSort(List<E> list, List choice) 

E必须延伸Comparable<E>Country不指定不。为了让编译,你必须改变

public class Country { 

public class Country implements Comparable<Country> { 

,你还必须实现

public int compareTo(Country c) {} 

,但做这种方式赢得”您可以灵活地根据多个不同的维度进行排序。