The problem Write a program that asks for the names of runners and the time it took each of them to finish a race. The program should display the names of the runners in the order that they finsihed. Use a comparator and Collections.sort .
Breaking it down Create a Runner class class Runner {
private String name ;
private double timeToCompleteRace ;
public Runner ( String name , double timeToCompleteRace ) {
super ();
this . name = name ;
this . timeToCompleteRace = timeToCompleteRace ;
}
@Override
public String toString () {
return Objects . toStringHelper ( this )
. add ( "name" , name )
. add ( "time to complete" , timeToCompleteRace )
. toString ();
}
public String getName () {
return name ;
}
public double getTimeToCompleteRace () {
return timeToCompleteRace ;
}
}
Initalize variables List < Runner > race = Lists . newArrayList ();
// Create a Scanner object for keyboard input.
Scanner keyboard = new Scanner ( System . in );
String name ;
double raceTime ;
RunningTheRace runningTheRace = new RunningTheRace ();
do {
System . out . print ( "Enter name: " );
name = keyboard . next ();
System . out . print ( "Enter race time: (-1 to exit): " );
raceTime = keyboard . nextDouble ();
if (! name . equals ( "-1" )) {
race . add ( runningTheRace . new Runner ( name , raceTime ));
}
} while (! name . equals ( "-1" ));
Create comparator /**
* Comparator byRaceTime
*/
static Comparator < Runner > byRaceTime = new Comparator < Runner >() {
public int compare ( Runner left , Runner right ) {
return Double . compare ( left . getTimeToCompleteRace (), right . getTimeToCompleteRace ()) ; // use your logic
}
};
Sort runners Collections . sort ( race , byRaceTime );
Display output System . out . println ( "Name" + "\t" + "Time" );
System . out . println ( "---------------------" );
for ( Runner runner : race ) {
System . out . println ( runner . getName () + "\t" + runner . getTimeToCompleteRace ());
}
Output Enter name: jack
Enter race time: (-1 to exit): 2343
Enter name: jimmy
Enter race time: (-1 to exit): 2344
Enter name: cindy
Enter race time: (-1 to exit): 9384
Enter name:
-1
Enter race time: (-1 to exit): -1
Name Time
---------------------
jack 2343.0
jimmy 2344.0
cindy 9384.0
Level Up Pretty up the output Fix bug w/ -1 as the exit Format time in seconds, minutes and hours Running the race posted by Justin Musgrove on 30 April 2013
Tagged: java and java-exercises-beginner
Share on: Facebook Google+