Question: public class OurDate { private int day; private int month; private int year; public OurDate() { // TODO: CHAIN THE CONSTRUCTOR //ASSIGN DEFAULT VALUES OF

public class OurDate { private int day; private int month; private int year; public OurDate() { // TODO: CHAIN THE CONSTRUCTOR //ASSIGN DEFAULT VALUES OF 1/1/1800 this.day = 10; this.month = 9; this.year = 2018; } public OurDate(int day, int month, int year) { //TO DO: INSTEAD OF STATEMENTS LIKE this.day = day, ASSIGN VALUES TO FIELDS BY INVOKING SETTERS this.day = day; this.month = month; this.year = year; } //TO DO: USE THE "Source" DROP-DOWN MENU FROM THE ECLIPSE IDE AND SELECT "Generate hashCode() and equals()..." //TO DO: DELETE THE SOURCE CODE IN THE equals() METHOD. WRITE YOUR OWN CODE TO DETERMINE IF TWO DATES ARE EQUAL //NO NEED TO MODIFY THE hashCode() method //TO DO: MODIFY THE STRING AFTER THE return STATEMENT SUCH THAT THE OUTPUT MATCHES THE SAMPLE PROGRAM OUTPUT IN THE LAB WRITEUP @Override public String toString() { return "OurDate [day=" + day + ", month=" + month + ", year=" + year + "]"; } //TO DO: CHANGE ACCESS SPECIFIER FROM public TO private, making references immutable from an outside class public void setDay(int day) { // IN FUTURE LABS/ASSIGNMENTS, DATA VERIFICATION WILL BE DONE HERE, BEFORE this.day = day; this.day = day; } public int getDay() { return day; } //TO DO: CHANGE ACCESS SPECIFIER FROM public TO private public void setMonth(int month) { // IN FUTURE LABS/ASSIGNMENTS, DATA VERIFICATION WILL BE DONE HERE, BEFORE this.month = month; this.month = month; } public int getMonth() { return month; } //TO DO: CHANGE ACCESS SPECIFIER FROM public TO private public void setYear(int year) { // IN FUTURE LABS/ASSIGNMENTS, DATA VERIFICATION WILL BE DONE HERE, BEFORE this.year = year; this.year = year; } public int getYear() { return year; } }//END CLASS OURDATE
public class Person { private String name; private int idNum; private OurDate birthdate ; //TO DO FOR ALL CONSTRUCTORS REQUIRING DEFAULT INITIALZATIONS SET name TO "unknown" //TO DO FOR ALL CONSTRUCTORS REQUIRING DEFAULT INITIALZATIONS SET idNum TO -9 //TO DO FOR ALL CONSTRUCTORS REQUIRING DEFAULT INITIALZATIONS SET birthdate TO new OurDate(), AND BY VIRTUE OF DEFAULT OurDate VALUES, January 1, 1800 public Person() { // TODO CHAIN THE CONSTRUCTOR: SEE DEITEL CHAPTER 8 this.name = null; this.idNum = 0; this.birthdate = null; } public Person(String name) { // TODO CHAIN THE CONSTRUCTOR this.name = name; this.idNum = 0; this.birthdate = null; } public Person(int idNum) { // TODO CHAIN THE CONSTRUCTOR this.name =null; this.idNum = idNum; this.birthdate = null; } public Person(OurDate birthdate) { // TODO CHAIN THE CONSTRUCTOR this.name = null; this.idNum = 0; this.birthdate = null; } public Person(String name, int idNum) { // TODO CHAIN THE CONSTRUCTOR this.name = name; this.idNum = 0; this.birthdate = null; } public Person(String name, OurDate birthdate) { // TODO CHAIN THE CONSTRUCTOR this.name = name; this.idNum = 0; this.birthdate = birthdate; } public Person(int idNum, OurDate birthdate) { // TODO CHAIN THE CONSTRUCTOR this.name = null; this.idNum = idNum; this.birthdate = birthdate; } public Person(String name, int idNum, OurDate birthdate) { // TODO: INVOKE SETTERS INSTEAD OF ASSIGNING VALUES USING this.name = name, etc... this.name = name; this.idNum = idNum; this.birthdate = birthdate; } // TO DO: MODIFY THE STRING AFTER THE return STATEMENT SUCH THAT THE OUTPUT MATCHES THE SAMPLE PROGRAM OUTPUT IN THE LAB WRITEUP @Override public String toString() { return "Person [name=" + name + ", idNum=" + idNum + ", birthdate=" + birthdate + "]"; } //TO DO: USE THE "Source" DROP-DOWN MENU FROM THE ECLIPSE IDE AND SELECT "Generate hashCode() and equals()..." //TO DO: DELETE THE SOURCE CODE IN THE equals() METHOD. WRITE YOUR OWN CODE TO DETERMINE IF TWO Person REFERENCES ARE EQUAL //NO NEED TO MODIFY THE hashCode() method public int getIdNum() { return idNum; } //TO DO: CHANGE ACCESS SPECIFIER FROM public TO private public void setIdNum(int idNum) { // IN FUTURE LABS/ASSIGNMENTS, DATA VERIFICATION WILL BE DONE HERE, BEFORE this.day = day; this.idNum = idNum; } public OurDate getBirthdate() { return birthdate; } //TO DO: CHANGE ACCESS SPECIFIER FROM public TO private public void setBirthdate(OurDate birthdate) { // IN FUTURE LABS/ASSIGNMENTS, DATA VERIFICATION WILL BE DONE HERE, BEFORE this.day = day; this.birthdate = birthdate; } public String getName() { return this.name; } //TO DO: CHANGE ACCESS SPECIFIER FROM public TO private public void setName(String name) { // IN FUTURE LABS/ASSIGNMENTS, DATA VERIFICATION WILL BE DONE HERE, BEFORE this.day = day; this.name = name; } //TO DO: CHANGE ACCESS SPECIFIER FROM public TO private public void setNumber(int number) { // IN FUTURE LABS/ASSIGNMENTS, DATA VERIFICATION WILL BE DONE HERE, BEFORE this.day = day; this.idNum = number; } public int getNumber() { return idNum; } }//END CLASS
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class PersonDriver { public static void main(String[] args) { Scanner in = new Scanner(System.in); final int MAX = 5; Person [] persons = new Person[MAX]; persons[0] = new Person(); persons[1] = new Person("Justin Trudeau"); persons[2] = new Person(54321); persons[3] = new Person(new OurDate(6, 10, 2018)); persons[4] = new Person("Lao Chee", 421, new OurDate(22, 12, 1958)); // TO DO: PRINT OUT ALL OF THE ARRAY ELEMENTS USING A FOR LOOP System.out.println("ENTIRE ARRAY USING REGULAR FOR LOOP: "); for(int i = 0; i and call it 'people' // TO DO: ADD THE ARRAY ELEMENTS TO THE ArrayList - THERE ARE A VARIETY OF WAYS TO DO THIS BUT YOU MUST USE THE add() method // TO DO: PRINT OUT ONLY THE 4TH (i.e. THE 3rd ELEMENT INDEXED) ArrayList ELEMENT - USE THE get() METHOD System.out.println("A SINGLE ARRAYLIST ELEMENT: "); // TO DO: PRINT OUT ALL OF THE ArrayList ELEMENTS USING A FOR LOOP. // ARE YOU ITERATING UNTIL people.length OR people.size() ??? // ARE YOU ACCESSING EACH ArrayList ELEMENT WITH THE LOOP INDEX i ??? // INVOKE THE get() AND THE toString() METHOD IN A System.out.println() System.out.println("ENTIRE ARRAYLIST USING REGULAR FOR LOOP:"); // TO DO: ADD ANOTHER ELEMENT TO THE ArrayList AT RUNTIME: // USE Person and OurDate CONSTRUCTORS THAT SPECIFIES ALL FIELDS, PROMPT USER FOR INFO. System.out.println("ADD AN ELEMENT TO THE ARRAYLIST - DATA COLLECTED FROM USER:"); // ArrayList you can add an extra element at runtime. An array has a maximum size that is specified at compile time. An ArrayList can grow as needed - it has maximum capacity. // TO DO: REMOVE Person [name=unknown, idNum=-9, birthdate=OurDate [day=6, month=10, year=2018]] // TO DO: VERIFY ArrayList ELEMENT WAS REMOVED AND NEW PERSON ADDED: // PRINT OUT ALL OF THE ArrayList ELEMENTS USING AN ENHANCED FOR LOOP System.out.println(" VERIFY NEW ARRAY LIST ELEMENT WAS ADDED, AND THE ELEMENT FROM THE PREVIOUS STEP WAS REMOVED - PRINT ENTIRE ARRAYLIST USING ENHANCED FOR LOOP:"); // TO DO: SEARCH THE ArrayList FOR A Person // PROMPT USER FOR A NAME, USE A LOOP System.out.print("ENTER A NAME TO SEARCH FOR: "); // TO DO: ONLY COMMENTING AND UNCOMMENTING AND THEN RUN THE CODE IS REQUIRED - NO CODING CHANGES REQUIRED // TO DO: SORT ArrayList BY NAME - HINT: SEE PAGE 697 OF DEITEL TEXTBOOK // TO DO: UNCOMMENT THE FOLLOWING LINES OF CODE THAT ATTEMPT TO INVOKE THE sort() METHOD // HINT: ONLY ONE OF THEM WORKS. //people.sort(); //Collections.sort(people); //Collections.sort((List)people); //Collections.sort(people, new NameComparator()); //Collections.sort(people, new NameComparator() ); System.out.println(" VERIFY ARRAY LIST IS SORTED BY NAME - PRINT ENTIRE ARRAY LIST: "); //TO DO: COMMENT AND UNCOMMENT THE LINE OR LINES OF CODE TO VERIFY CORRECT CONSOLE OUTPUT //System.out.println(people); //TO DO: COMMENT AND UNCOMMENT THE LINE OR LINES OF CODE TO VERIFY CORRECT CONSOLE OUTPUT //System.out.println(people.toString()); //TO DO: COMMENT AND UNCOMMENT THE LINE OR LINES OF CODE TO VERIFY CORRECT CONSOLE OUTPUT //for(Person p: people) //System.out.println(p.toString()); } //PRIVATE INNER CLASS - THIS MARKS THE BEGINNING OF UNDERSTANDING OF SYNTAX FOR ANONYMOUS INNER CLASSES, EVENT HANDLING, AND LAMBDAS //GO TO THE bin FOLDER FOR THE PROJECT AND NOTE THE EXTENSION FOR PersonDriver //implements IS THE KEYWORD FOR INTERFACES, IN THE SAME WAY THAT extends IS THE KEYWORK FOR INHERITANCE private static class NameComparator implements Comparator { @Override public int compare(Person o1, Person o2) { //MUST PROVIDE compare() METHOD BY VIRTUE OF IMPLEMENTING Comparator INTERFACE if(o1.getName().compareTo(o2.getName()) > 1) return 1; else if(o1.getName().compareTo(o2.getName()) Part A: Load the three java files into a new project. Run PersonTester and examine the user keyboard and console interaction. Part B: Make the following refactors and additions: OurDate and Person class: 1. Update every constructor: use keyword "this" to chain each constructor to the overloaded constructor that receives every formal parameter as an input. In the overloaded constructor that receives every formal parameter as an input, instead of explicitly assigning parameter values to fields (i.e. this.dayday), invoke each field's respective setter()" 2. 3. Change all "setter" methods access specifier from public to private. 4. Add the equals() and hashCode() methods. 5. Update the toString) method to obtain the specified output as noted in the sample program execution screen capture below. Do not change any user interaction other than those specified in the previous step 5 - the underlying code change will not affect any program functionality 6. Person Tester class: 1. Refactor the array reference to now become an ArrayList. 2. Make any other changes as specified in the comments in the source code. 3. The last demo only involves commenting/uncommenting code and execution of the code -no code changes are required. Do not change any user interaction - the underlying code change will not affect any program functionality 4
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
