I have several suggestions: 1. For readability I would suggest to introduce `enum`s like public enum SeatType { FIRSTCLASS, ECONOMY } If you have to make several decisions depending on the seats type `SeatType.FIRSTCLASS` reads better, than perhaps `seatnumber<5`. 2. You are doing twice the same thing: Iterating through a partial array. It would be more streamlined if you write a method for both cases, like: private Integer tryReservation(SeatType s) { Integer reservation=null; int start=(s==SeatType.FIRSTCLASS)?firstClassStart:economyStart; int stop=start+capacity; for(int number=start;number<stop;number+=1){ if(seats[number]==free){ seats[number]=!free; reservation=number; break; } } return reservation; } This makes the following possible: private Integer makeReservation(SeatType s) { SeatType alternative=getAlternative(s); Integer reservedSeat=tryReservation(s); if(reservedSeat==null && !isClassFull(alternative)){ if(alternativeWanted){ reservedSeat=tryReservation(alternative); } } return reservedSeat; } So your code becomes much smaller. And the number of if-else-whatelse decreases a lot.