2014-05-03 50 views
-2

我有两个类MarathonAdminRunner按时间排序的ArrayList对象属性

我想排序列表(runners)持有Runner类的对象。我完成了所有 的编码,直到方法sortRunnerList,它说排序列表。我在Runner类中创建了 a compareTo方法,并且当我比较Runner的对象时,它们会选择默认时间值,而不是我分配给产生随机数的对象的默认时间值(在MarathonAdmin类中完成)。

有人可以帮助解决这个问题吗?

class Marathon 

import java.util.*; 
import java.io.*; 
import ou.*; 
import java.util.Random; 

public class MarathonAdmin 
{ 
    // instance variables - replace the example below with your own 
    private List<Runner> runners; 
    private String ageGroup; 
    private String age; 
    private Random randomNumber; 
    private String result; 
    String ageRunner; 
     String ageGrouprunners; 
     Scanner lineScanner; 
     int ans ; 
    Runner runnerobj = new Runner(); 
    Runner obj2 = new Runner(); 


    public MarathonAdmin() 
    { 
     runners = new ArrayList<>(); 
    } 

    public void readInRunners(){ 
     String pathName = OUFileChooser.getFilename(); 
     File aFile = new File(pathName); 
     String nameRunner; 

    BufferedReader bufferedFileReader = null; 
     try 
     { 
     bufferedFileReader = new BufferedReader(new FileReader(aFile)); 
     String currentLine = bufferedFileReader.readLine(); 

     while (currentLine != null){ 
      lineScanner = new Scanner(currentLine); 
      lineScanner.useDelimiter(","); 
      nameRunner = lineScanner.next(); 
      ageRunner = lineScanner.next(); 

      if (Integer.parseInt(ageRunner) < 18) 
       {  
        result = "junior"; 
        System.out.println(currentLine +" category" + " : Junior"); 
       } 

       if (Integer.parseInt(ageRunner) > 55) 
       { 
       result = "senior"; 
       System.out.println(currentLine +" category"+ " : Senior"); 
       } 

       if (Integer.parseInt(ageRunner) > 18 && Integer.parseInt(ageRunner) < 55) 
       { 
        result = "standard"; 
        System.out.println(currentLine +" category"+ " : Standard"); 
       } 

      ageGrouprunners = result; 

       Runner runnerobj = new Runner(); 
       runnerobj.setName(nameRunner); 
       runnerobj.setAgeGroup(ageGrouprunners); 
       System.out.println(runnerobj); //rough test 

       runners.add(runnerobj); 

       currentLine = bufferedFileReader.readLine(); 
     } 
     } 
     catch (Exception anException) 
     { 
     System.out.println("Error: " + anException); 
     } 

     finally 
     { 
     try 
     { 
      bufferedFileReader.close(); 
     } 
     catch (Exception anException) 
     { 
      System.out.println("Error: " + anException); 
     } 
    } 
} 

public void runMarathon(){ 
int size = runners.size(); 

// for (int runnersIndex = 0; runnersIndex <= size; runnersIndex ++){ 
    for(Runner nameRunner : runners){ 
    this.randomNumber = new Random(); 
    ans = randomNumber.nextInt(190 - 80 +1) + 90 ; 
    System.out.println(ans); 

    nameRunner.setTime(ans); 
    } 
    } 

    public void sortRunnerList(){ 
    for(Runner nameRunner : runners){ 
    int time = nameRunner.getTime(); 
    System.out.println(time); 

    Runner obj = new Runner(); 
    obj.setTime(ans); 

    int res = nameRunner.compareTo(obj); 
    System.out.println(res); 
} 
} 
} 

    //(This is method of class Runner) 
    Class Runner 
    Method compareTo() 
    @Override 
    public int compareTo(Runner anotherRunner) 
    { 
    return this.getTime()-(anotherRunner.getTime()); 
    } 
+0

替换

return this.getTime()-(anotherRunner.getTime()); 

请张贴[最小,** **完成,和可验证的示例](http://stackoverflow.com/help/ mcve) - 发布长时间不可编译的代码使得找到问题变得更加困难/不可能。 – Dukeling

回答

1

尝试用

return Integer.valueOf(this.getTime()).compareTo(anotherRunner.getTime()); 
+0

'getTime()'返回一个'int',只要我可以从代码中推断出它。基元上没有'compareTo'。 –

+1

@ThomasJungblut谢谢,修正。 –

+0

仅供参考,还有'Integer.compare(x,y)'。 –