22
33import java .util .Map ;
44import java .util .Scanner ;
5+ import java .util .Set ;
56import java .util .TreeMap ;
67
78public class PetHotel
89{
910 TreeMap <Integer , String > hotelRooms ;
1011 private Scanner scanner ;
1112
12- private String petName ;
13- private int roomNumber ;
14-
1513 public PetHotel ()
1614 {
1715 hotelRooms = new TreeMap <>();
@@ -30,6 +28,9 @@ private void run()
3028 String command ;
3129 String [] words ;
3230
31+ String petName ;
32+ int roomNumber ;
33+
3334 do
3435 {
3536 int fromRoomNumber ;
@@ -40,6 +41,16 @@ private void run()
4041 System .out .println ("There aren't any pets here right now." );
4142 }
4243
44+ /* Valid commands:
45+ Checkin <petname> <roomNumber>;
46+ Checkout <petname> <roomNumber>;
47+ Move <petname> <fromRoomNumber> <toRoomNumber>;
48+ Swap <roomNumber> <roomNumber>;
49+ MoveOver (moves all pets to roomNumber + 1, 109 goes to 100)
50+ Occupancy (list occupants);
51+ CloseForSeason (clear map);
52+ Exit (ends program) */
53+
4354 System .out .print ("Enter command: " );
4455 String inputLine = scanner .nextLine ();
4556 words = inputLine .split (" " );
@@ -50,90 +61,26 @@ private void run()
5061 petName = words [1 ];
5162 roomNumber = Integer .parseInt (words [2 ]);
5263
53- boolean roomExists = (roomNumber >= 100 && roomNumber <= 109 );
54-
55- if (!roomExists )
56- {
57- System .out .println ("Sorry, we only have rooms 100 - 109. Please select a room that exists." );
58- }
59- else if (hotelRooms .get (roomNumber ) != null )
60- {
61- System .out .println ("Sorry, this room already has an occupant. Please select a different one." );
62- }
63- else if (hotelRooms .get (roomNumber ) == null )
64- {
65- checkIn (petName , roomNumber );
66- }
64+ checkIn (petName , roomNumber );
6765 }
6866 else if (command .equalsIgnoreCase ("CheckOut" ))
6967 {
70- String petName = words [1 ];
68+ petName = words [1 ];
7169 roomNumber = Integer .parseInt (words [2 ]);
7270
73- if (hotelRooms .get (roomNumber ) == null )
74- {
75- System .out .println ("Your pet is not in room number " + roomNumber + "." );
76- }
77- else
78- {
79- boolean roomExists = (roomNumber >= 100 && roomNumber <= 109 );
80- boolean isRightPet = hotelRooms .get (roomNumber ).equalsIgnoreCase (petName );
81-
82- if (!roomExists )
83- {
84- System .out .println ("Sorry, we only have rooms 100 - 109. Please select a room that exists." );
85- }
86- else if (hotelRooms .get (roomNumber ) == null )
87- {
88- System .out .println ("Sorry, this room is empty." );
89- }
90- else if (!isRightPet )
91- {
92- System .out .println ("This is not the pet you're looking for." );
93- }
94- else if (hotelRooms .get (roomNumber ) != null )
95- {
96- checkOut (petName , roomNumber );
97- }
98- }
71+ checkOut (petName , roomNumber );
9972 }
10073 else if (command .equalsIgnoreCase ("Move" ))
10174 {
102- String petName = words [1 ];
75+ petName = words [1 ];
10376 fromRoomNumber = Integer .parseInt (words [2 ]);
10477 toRoomNumber = Integer .parseInt (words [3 ]);
10578
106- if (hotelRooms .get (fromRoomNumber ) == null )
107- {
108- System .out .println ("Your pet is not in room number " + fromRoomNumber + "." );
109- }
110- else
111- {
112- boolean toRoomExists = (toRoomNumber >= 100 && toRoomNumber <= 109 );
113- boolean fromRoomExists = (fromRoomNumber >= 100 && fromRoomNumber <=109 );
114- boolean isRightPet = hotelRooms .get (fromRoomNumber ).equalsIgnoreCase (petName );
115-
116- if (!fromRoomExists )
117- {
118- System .out .println ("Sorry, we only have rooms 100 - 109. " + petName + " is currently in a room that exists. Please try again." );
119- }
120- else if (!toRoomExists )
121- {
122- System .out .println ("Sorry, we only have rooms 100 - 109. We cannot move " + petName + " to a room that does not exist." );
123- }
124- else if (hotelRooms .get (toRoomNumber ) != null )
125- {
126- System .out .println ("Sorry, room number " + toRoomNumber + " already has an occupant. Please select a different one." );
127- }
128- else if (!isRightPet )
129- {
130- System .out .println ("This is not the pet you're looking for." );
131- }
132- else
133- {
134- move (petName ,fromRoomNumber ,toRoomNumber );
135- }
136- }
79+ move (petName , fromRoomNumber , toRoomNumber );
80+ }
81+ else if (command .equalsIgnoreCase ("MoveOver" ))
82+ {
83+ moveOver ();
13784 }
13885 else if (command .equalsIgnoreCase ("Occupancy" ))
13986 {
@@ -142,12 +89,17 @@ else if (command.equalsIgnoreCase("Occupancy"))
14289 else if (command .equalsIgnoreCase ("CloseForSeason" ))
14390 {
14491 closeForSeason ();
92+ }
93+ else if (command .equalsIgnoreCase ("Swap" ))
94+ {
95+ int firstRoomNumber = Integer .parseInt (words [1 ]);
96+ int secondRoomNumber = Integer .parseInt (words [2 ]);
14597
98+ swap (firstRoomNumber , secondRoomNumber );
14699 }
147100 else if (command .equalsIgnoreCase ("Exit" ))
148101 {
149102 System .out .println ("You have ended the program!" );
150-
151103 }
152104 else
153105 {
@@ -157,40 +109,179 @@ else if (command.equalsIgnoreCase("Exit"))
157109
158110 }
159111
160- private void checkIn (String petName , int roomNumber )
112+ private boolean roomNotReal (int roomNumber )
113+ {
114+ return !(roomNumber >= 100 && roomNumber <= 109 );
115+ }
116+
117+ private boolean roomTaken (int roomNumber )
161118 {
162- hotelRooms .put (roomNumber , petName );
163- System .out .println ("" + petName + " checked into room " + roomNumber + "." );
119+ return !(hotelRooms .get (roomNumber ) == null );
120+ }
121+
122+ private boolean wrongPet (String petName , int roomNumber )
123+ {
124+ return !(hotelRooms .get (roomNumber ).equalsIgnoreCase (petName ));
125+ }
164126
165- System .out .println (hotelRooms );
127+ private void checkIn (String petName , int roomNumber )
128+ {
129+ if (roomNotReal (roomNumber ))
130+ {
131+ System .out .println ("Sorry, we only have rooms 100 - 109. Please select a room that exists." );
132+ }
133+ else if (roomTaken (roomNumber ))
134+ {
135+ System .out .println ("Sorry, this room already has an occupant. Please select a different one." );
136+ }
137+ else
138+ {
139+ hotelRooms .put (roomNumber , petName );
140+ System .out .println ("" + petName + " checked into room " + roomNumber + "." );
141+ }
166142 }
167143
168144 private void checkOut (String petName , int roomNumber )
169145 {
170- hotelRooms .remove (roomNumber , petName );
171- System .out .println ("" + petName + " has been checked out of room number " + roomNumber + "." );
146+ if (roomNotReal (roomNumber ))
147+ {
148+ System .out .println ("Sorry, we only have rooms 100 - 109. Please select a room that exists." );
149+ }
150+ else if (!roomTaken (roomNumber ))
151+ {
152+ System .out .println ("Your pet is not in room number " + roomNumber + "." );
153+ }
154+ else
155+ {
156+ if (wrongPet (petName , roomNumber ))
157+ {
158+ System .out .println ("This is not the pet you're looking for." );
159+ }
160+ else if (roomTaken (roomNumber ))
161+ {
162+ hotelRooms .remove (roomNumber , petName );
163+ System .out .println ("" + petName + " has been checked out of room number " + roomNumber + "." );
164+ }
165+ }
166+ }
167+
168+ private void move (String petName , int fromRoomNumber , int toRoomNumber )
169+ {
170+ if (roomNotReal (fromRoomNumber ))
171+ {
172+ System .out .println ("Sorry, we only have rooms 100 - 109. " + petName + " is currently in a room that exists. Please try again." );
173+ }
174+ else if (roomNotReal (toRoomNumber ))
175+ {
176+ System .out .println ("Sorry, we only have rooms 100 - 109. We cannot move " + petName + " to a room that does not exist." );
177+ }
178+ else if (!roomTaken (fromRoomNumber ))
179+ {
180+ System .out .println ("Your pet is not in room number " + fromRoomNumber + "." );
181+ }
182+ else
183+ {
184+ if (roomTaken (toRoomNumber ))
185+ {
186+ System .out .println ("Sorry, room number " + toRoomNumber + " already has an occupant. Please select a different one." );
187+ }
188+ else if (wrongPet (petName , fromRoomNumber ))
189+ {
190+ System .out .println ("This is not the pet you're looking for." );
191+ }
192+ else
193+ {
194+ hotelRooms .remove (fromRoomNumber );
195+ hotelRooms .put (toRoomNumber , petName );
196+ System .out .println ("" + petName + " has been moved from room number " + fromRoomNumber + " to room number " + toRoomNumber + "." );
197+ }
198+ }
199+ }
200+
201+ private void swap (int firstRoomNumber , int secondRoomNumber )
202+ {
203+ if (roomNotReal (firstRoomNumber ))
204+ {
205+ System .out .println ("Sorry, we only have rooms 100 - 109. The pet you are looking for is currently in a room that exists. Please try again." );
206+ }
207+ else if (roomNotReal (secondRoomNumber ))
208+ {
209+ System .out .println ("Sorry, we only have rooms 100 - 109. We cannot move the pet you are looking for to a room that does not exist." );
210+ }
211+ else if (!roomTaken (firstRoomNumber ))
212+ {
213+ System .out .println ("The pet you are looking for is not in room number " + firstRoomNumber + "." );
214+ }
215+ else
216+ {
217+ if (!roomTaken (secondRoomNumber ))
218+ {
219+ System .out .println ("Sorry, there aren't any pets in this room to swap with!" );
220+ }
221+ else
222+ {
223+ String petInFirstRoom = hotelRooms .get (firstRoomNumber );
224+ String petInSecondRoom = hotelRooms .get (secondRoomNumber );
172225
173- System .out .println (hotelRooms );
226+ hotelRooms .put (secondRoomNumber , petInFirstRoom );
227+ hotelRooms .put (firstRoomNumber , petInSecondRoom );
228+ System .out .println ("" + petInFirstRoom + " has been moved to room number " + secondRoomNumber +
229+ ", and " + petInSecondRoom + " has been moved to room number " + firstRoomNumber + "." );
230+ }
231+ }
174232 }
175233
176- private void move ( String petname , int fromRoomNumber , int toRoomNumber )
234+ private void moveOver ( )
177235 {
178- hotelRooms .remove (fromRoomNumber );
179- hotelRooms .put (toRoomNumber , petname );
180- System .out .println ("" + petname + " has been moved from room number " + fromRoomNumber + " to room number " + toRoomNumber + "." );
236+ String firstPet = null ;
237+
238+ if (hotelRooms .get (109 ) != null )
239+ {
240+ firstPet = hotelRooms .get (109 );
241+ hotelRooms .remove (109 );
242+ }
243+
244+ for (int i = 108 ; i >= 100 ; i --)
245+ {
246+ String currentPet = null ;
247+
248+ if (hotelRooms .get (i ) != null )
249+ {
250+ currentPet = hotelRooms .get (i );
251+ }
181252
182- System .out .println (hotelRooms );
253+ if (currentPet != null )
254+ {
255+ hotelRooms .put (i + 1 , currentPet );
256+ hotelRooms .remove (i );
257+ }
258+ }
259+
260+ if (firstPet != null )
261+ {
262+ hotelRooms .put (100 , firstPet );
263+ }
183264 }
184265
185266 private void getOccupancy ()
186267 {
187- hotelRooms .forEach ((roomNumber ,petName ) -> System .out .println ("" + petName + " is in room number " + roomNumber + "." ));
268+ Set <Map .Entry <Integer , String >> entries = hotelRooms .entrySet ();
269+
270+ for (Map .Entry <Integer , String > entry : entries )
271+ {
272+ int roomNumber = entry .getKey ();
273+ String petName = entry .getValue ();
274+
275+ System .out .println ("" + petName + " is in room number " + roomNumber + "." );
276+ }
277+
278+ //Lambda version:
279+ // hotelRooms.forEach((roomNumber,petName) -> System.out.println("" + petName + " is in room number " + roomNumber + "."));
188280 }
189281
190282 private void closeForSeason ()
191283 {
192284 hotelRooms .clear ();
193285 System .out .println ("We are closed for the rest of the season. Thank you for your patronage!" );
194286 }
195-
196287}
0 commit comments