Merge branch 'story-4' into 'master'

Story 4



See merge request !6
This commit is contained in:
Michael Rausch
2017-03-06 19:39:54 +13:00
5 changed files with 228 additions and 11 deletions
+9 -3
View File
@@ -27,6 +27,12 @@ public class App
race.addBoat(new Boat(boatNames.get(i))); race.addBoat(new Boat(boatNames.get(i)));
} }
race.addLeg(new Leg(035, 100, "Start"));
race.addLeg(new Leg(010, 300, "Marker 1"));
race.addLeg(new Leg(350, 400, "Leeward Gate"));
race.addLeg(new Leg(010, 400, "Windward Gate"));
race.addLeg(new Leg(010, 400, "Leeward Gate"));
return race; return race;
} }
@@ -43,11 +49,11 @@ public class App
} }
if (race != null){ if (race != null){
race.displayStartingBoats(); race.startRace();
System.out.println("");
race.displayFinishingOrder(); race.displayFinishingOrder();
} }
else{ else{
System.out.println("e"); System.out.println("e");
+101
View File
@@ -0,0 +1,101 @@
package seng302;
public class Leg {
private int heading;
private int distance;
private boolean isFinishingLeg;
private Marker startingMarker;
/*
Create a new leg
@param heading, the magnetic heading of this leg
@param distance, the total distance of this leg in meters
@param marker, the marker this leg starts on
*/
public Leg(int heading, int distance, Marker marker){
this.heading = heading;
this.distance = distance;
this.startingMarker = marker;
this.isFinishingLeg = false;
}
/*
Create a new leg
@param heading, the magnetic heading of this leg
@param distance, the total distance of this leg in meters
@param markerName, the name of the marker this leg starts on
*/
public Leg(int heading, int distance, String markerName){
this.heading = heading;
this.distance = distance;
this.startingMarker = new Marker(markerName);
this.isFinishingLeg = false;
}
/*
Set the heading for this leg
*/
public void setHeading(int heading){
this.heading = heading;
}
/*
Get the heading of this leg
*/
public int getHeading(){
return this.heading;
}
/*
Set the distance of this leg in meters
*/
public void setDistance(int distance){
this.distance = distance;
}
/*
Get the total distance of this leg in meters
*/
public int getDistance(){
return this.distance;
}
/*
Set the marker this leg starts on
*/
public void setMarker(Marker marker){
this.startingMarker = marker;
}
/*
Returns the marker this leg started on
*/
public Marker getMarker(){
return this.startingMarker;
}
/*
Returns the name of the marker this leg started on
*/
public String getMarkerLabel(){
return this.startingMarker.getName();
}
/*
Specify whether or not the race finishes on this leg
@param isFinishingLeg whether or not the race finishes on this leg
*/
public void setFinishingLeg(boolean isFinishingLeg){
this.isFinishingLeg = isFinishingLeg;
}
/*
@returns true if this the race finishes after this leg
*/
public boolean getIsFinishingLeg(){
return this.isFinishingLeg;
}
}
+17
View File
@@ -0,0 +1,17 @@
package seng302;
class Marker{
private String name;
public Marker(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
+46 -8
View File
@@ -8,10 +8,12 @@ import java.util.List;
public class Race { public class Race {
private ArrayList<Boat> boats; private ArrayList<Boat> boats;
private ArrayList<Leg> legs;
private int numberOfBoats = 0; private int numberOfBoats = 0;
public Race(){ public Race(){
boats = new ArrayList<Boat>(); boats = new ArrayList<Boat>();
legs = new ArrayList<Leg>();
} }
/* /*
@@ -23,6 +25,19 @@ public class Race {
numberOfBoats += 1; numberOfBoats += 1;
} }
/*
Returns a list of boats in a random order
@returns a list of boats
*/
public Boat[] getShuffledBoats(){
// Shuffle the list of boats
long seed = System.nanoTime();
Collections.shuffle(this.boats, new Random(seed));
return boats.toArray(new Boat[boats.size()]);
}
/* /*
Returns a list of boats in the order that they Returns a list of boats in the order that they
finished the race (position 0 is first place) finished the race (position 0 is first place)
@@ -30,11 +45,7 @@ public class Race {
@returns a list of boats @returns a list of boats
*/ */
public Boat[] getFinishedBoats(){ public Boat[] getFinishedBoats(){
// Shuffle the list of boats return getShuffledBoats();
long seed = System.nanoTime();
Collections.shuffle(this.boats, new Random(seed));
return boats.toArray(new Boat[boats.size()]);
} }
/* /*
@@ -71,16 +82,43 @@ public class Race {
/* /*
Prints the list of boats competing in the race Prints the list of boats competing in the race
*/ */
public void displayStartingBoats(){ private void displayStartingBoats(){
int numberOfBoats = this.getNumberOfBoats(); int numberOfBoats = this.getNumberOfBoats();
Boat[] boats = this.getBoats(); Boat[] boats = this.getBoats();
System.out.println("--- Competing Boats ---"); System.out.println("--- Starting Boats ---");
for (int i = 0; i < numberOfBoats; i++) { for (int i = 0; i < numberOfBoats; i++) {
System.out.println(boats[i].getTeamName()); System.out.println(boats[i].getTeamName());
} }
} }
/*
Adds a leg to the race
@param leg, the leg to add to the race
*/
public void addLeg(Leg leg){
this.legs.add(leg);
}
/*
Start the race and print each marker with the order
in which the boats passed that marker
*/
public void startRace(){
for (Leg leg : this.legs.toArray(new Leg[legs.size()])){
Boat[] boats = this.getShuffledBoats();
System.out.println("--- " + leg.getMarkerLabel() + " ---");
// Print the order in which the boats passed the marker
for (int i = 0; i < this.getNumberOfBoats(); i++) {
System.out.println("#" + Integer.toString(i+1) + " - " + boats[i].getTeamName());
}
System.out.println("");
}
}
} }
+55
View File
@@ -0,0 +1,55 @@
package seng302;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
/**
* Unit test for the Leg class.
*/
public class LegTest{
/*
Test creation of the leg by specifying a string
for the marker label
*/
@Test
public void testLegCreationUsingMarkerLabel()
{
Leg leg = new Leg(010, 100, "Marker");
assertEquals(leg.getHeading(), 010);
assertEquals(leg.getDistance(), 100);
assertEquals(leg.getMarkerLabel(), "Marker");
assertEquals(leg.getIsFinishingLeg(), false);
}
/*
Test creation of the leg by providing a
Marker object
*/
@Test
public void testLegCreation()
{
Leg leg = new Leg(010, 100, new Marker("Marker"));
assertEquals(leg.getHeading(), 010);
assertEquals(leg.getDistance(), 100);
assertEquals(leg.getMarkerLabel(), "Marker");
assertEquals(leg.getIsFinishingLeg(), false);
}
/*
Test changing whether or not a
leg is the finishing leg
*/
@Test
public void testSetFinishLeg()
{
Leg leg = new Leg(010, 100, "Marker");
leg.setFinishingLeg(true);
assertEquals(leg.getIsFinishingLeg(), true);
}
}