Homework 4
1 Introduction This assignment will cover classes, encapsulation and constructors.
2 ProblemDescription It’s Olympics season! There is a lot going on, so we need to keep track of lots of athletes, sports, and medals. Use your Java skills to do that so we can decide the winners of each event!
3 SolutionDescription For this homework you will need to create the following classes:
Sport Create an enum called Sport to represent the different event types at the Olympics. The Sport enum should have the following constants: BOBSLEIGH, CROSS_COUNTRY_SKIING, CURLING, FIGURE_SKATING, and LUGE.
You may be wondering why we’re listing an enum under classes. It turns out that all enums are actually classes, and they can have more complex members like a class can. To learn more about this, see: https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
Athlete Create a class called Athlete to model the competitors at the Olympics. Athlete objects should have the following private instance data: a String name, a String country, a Sport sport, an int goldMedals, an int silverMedals, an int bronzeMedals, and a boolean injured.
Athlete should have two constructors: The first constructor should take a name, a country, a sport, number of gold medals, number of silver medals, and number of bronze medals in that order. Every Athlete should start uninjured. The second constructor should take only a name, country, and sport. It should set all medal values to 0. This constructor must call the first constructor. Do not simply set each instance variable again.
Athlete should have a getter method for each of its instance variables (getName(), getCountry(), etc.). The getter for the injured variable should be called isInjured(). Additionally, Athlete should have a setter for the injured variable called setInjured(boolean injured).
1
An athlete should also be able to win some medals! Athlete should have the following methods: public void winGoldMedal()- increments goldMedals by 1 public void winSilverMedal() - increments silverMedals by 1 public void winBronzeMedal() - increments bronzeMedals by 1 public int getTotalMedals() - returns the total number of medals ever won by the athlete.
Event The last class for this program will model an Olympic event. An Event object should have the following private instancedata: anAthlete[] competitors,anAthlete goldMedalist,anAthlete silverMedalist, an Athlete bronzeMedalist, and a boolean eventPlayed.
The Event class should have just one constructor, which takes in a Athlete array. This array is guaranteed to not have null elements. The gold, silver, and bronze medalists should should all start out as null, and eventPlayed should start out as false.
In this Event class we also want to model the unpredictability of Athletes being injured during an event. The Event class should have the following method, which uses the competitors array to randomly decide if each athlete gets injured based on the probability parameter: public boolean injure(double probability)
For one call of the injure method, each athlete in the competition should be tested (random value generated) against the passed-in probability. The chance that each athlete is injured should be equal to the probability passed into the method. Ifanathletegetsinjured,setitsinjuredvariabletotrue. Finally,returntrueifanypreviouslyuninjuredathlete was injured, otherwise return false.
Now we need to decide the winners of each event! Create the following method: public void play()
This method should decide the fate of the event. We are going to use a simple (somewhat unrealistic) heuristic. Whichever athlete already has the most medals of a type is the person most likely to win that medal. For example, whendecidingthesilvermedalist,youshouldchoosethe(winner)athletewiththemostsilvermedals. Ifthereisatie, you should randomly choose the winner among the tied athletes.
As a very first step in this method, you should call the Event’s injure method to see if any athlete has an injury and cant finish the event. Any athlete who gets injured cannot be selected as a medalist. Next, the play method shoulddecidethemedalistsbasedonwhichathletehasthemostmedalsofthetypebeingdecided,asdiscussedabove. First, pick a gold medalist from the competitors array, setting the event’s goldMedalist to the selected competitor,andmakingsuretoincrementthemedalist’sgoldmedalcountbycallingwinGoldMedal(),anothermethod in the Athlete class. Repeat this process to select a silver medalist and bronze medalist keeping in mind that no athlete may receive more than one medal for an event. If there are no athletes left to assign as medalists, the variables should be left null. Once this process has been completed, eventPlayed should be set to true.
We did it! Now we have a working model of the Olympics, and we can create all kinds of athletes and events.
Make sure to test your code! That can be as simple as writing a main() method. Create some Athlete and Event objects, calltheirmethods, andmakesureeverythingworksas expected. Nobodywrites perfectcodeontheir first try.
2
4 HelpfulHints • Test! Test! Test! It is very important that you test your code thoroughly for this assignment because runtime errors have a heavy penalty (-25).
5 Checkstyle You must run checkstyle on your submission. The checkstyle cap for this assignment is15points. Review the Style Guide and download the Checkstyle jar. Run Checkstyle on your code like so:
$ java -jar checkstyle-6.2.2.jar *.java Audit done. Errors (potential points off): 0
The message above means there were no Checkstyle errors. If you had any errors, they would show up above this message, and the number at the end would be the points we would take off. The Java source files we provide contain no Checkstyle errors. For this assignment, there will be a maximum of 15 points lost due to Checkstyle errors (1 point per error). In future homeworks we will be increasing this cap, so get into the habit of fixing these style errors early!
6 Turn-inProcedure Non-compilingormissingsubmissionswillreceiveazero. NOexceptions
Submit Sport.java, Athlete.java,and Event.java toT-Square. Donotsubmitanycompiledbytecode (.classfiles)ortheCheckstylejarfile. Whenyou’reready,double-checkthatyouhavesubmittedandnotjustsaved a draft.
PleaseremembertorunyourcodethroughCheckstyle!
6.1 VerifytheSuccessofYourSubmissiontoT-Square Practicesafesubmission! VerifythatyourHWfilesweretrulysubmittedcorrectly,theuploadwassuccessful,andthat the files compile and run. It is solely your responsibility to turn in your homework and practice this safe submission safeguard. 1. After uploading the files to T-Square you should receive an email from T-Square listing the names of the files that were uploaded and received. If you do not get the confirmation email almost immediately, something is wrong with your HW submission and/or your email. Even receiving the email does not guarantee that you turned in exactly what you intended. 2. AftersubmittingthefilestoT-Square,returntotheAssignmentmenuoptionandthishomework. Itshouldshow the submitted files. 3. Download copies of your submitted files from the T-Square Assignment page placing them in a new folder. 4. Recompile and test those exact files.
3
5. This helps guard against a few things. (a) It helps insure that you turn in the correct files. (b) It helps you realize if you omit a file or files. 1 (If you do discover that you omitted a file, submit all of your files again, not just the missing one.) (c) Helps find last minute causes of files not compiling and/or running.
1Missingfileswillnotbegivenanycredit,andnon-compilinghomeworksolutionswillreceivefewtozeropoints.