【问题标题】:ArrayList object sorting by time property [closed]ArrayList对象按时间属性排序[关闭]
【发布时间】:2014-05-03 11:43:35
【问题描述】:

我有两个班级,MarathonAdminRunner

我想对包含 Runner 类的对象的列表 (runners) 进行排序。我都做了 编码到方法sortRunnerList,它表示对列表进行排序。我创造了 Runner 类中的 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());
   }

【问题讨论】:

标签: java sorting arraylist


【解决方案1】:

尝试替换

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

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

【讨论】:

  • getTime() 返回一个int,据我可以从代码中推断出来。基元上没有compareTo
  • @ThomasJungblut 谢谢,已修复。
  • 仅供参考,还有Integer.compare(x, y)
  • 是的,我知道,但我相信实例成员方法调用对于作者来说可能更容易理解。
  • 我想对跑步者列表(持有跑步者对象)进行排序,使时间最短的跑步者排在第一位,依此类推。例如,跑步者是跑步者列表中的对象。 Runner 有实例变量 time 。现在的问题是如何按跑步者的时间对跑步者进行排序?时间将通过方法 runMarathon() 中生成的随机数获得。现在如何选择两个不同时间的对象并比较它们?
猜你喜欢
  • 2011-03-21
  • 2011-02-16
  • 2012-08-05
  • 2013-05-21
相关资源
最近更新 更多