I see this thing different (just to complement other answers):
You have a flight with seats and passengers, so what i'd do is implement the flight class to add seat-passenger logic. The only trick thing is you have to choose which Passenger will be the non-seated:
- (seatNumber, null)
- (seatNumber, defaultPassenger with id=0, and name=OPEN)
I took the option two:
Passenger:
public class Seat {
private int seatNumber;
public Seat ( )
{
}
public Seat ( int seatNumber )
{
this.seatNumber = seatNumber;
}
/**
* @return the seatNumber
*/
public int getSeatNumber ( )
{
return seatNumber;
}
/**
* @param seatNumber the seatNumber to set
*/
public void setSeatNumber ( int seatNumber )
{
this.seatNumber = seatNumber;
}
@Override
public String toString ( )
{
return "Seats [seatNumber=" + seatNumber + "]";
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode ( )
{
final int prime = 31;
int result = 1;
result = prime * result + seatNumber;
return result;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals ( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass ( ) != obj.getClass ( ) )
return false;
Seat other = ( Seat ) obj;
if ( seatNumber != other.seatNumber )
return false;
return true;
}
}
Seat:
public class Seat {
private int seatNumber;
public Seat ( )
{
}
public Seat ( int seatNumber )
{
this.seatNumber = seatNumber;
}
/**
* @return the seatNumber
*/
public int getSeatNumber ( )
{
return seatNumber;
}
/**
* @param seatNumber the seatNumber to set
*/
public void setSeatNumber ( int seatNumber )
{
this.seatNumber = seatNumber;
}
@Override
public String toString ( )
{
return "Seats [seatNumber=" + seatNumber + "]";
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode ( )
{
final int prime = 31;
int result = 1;
result = prime * result + seatNumber;
return result;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals ( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass ( ) != obj.getClass ( ) )
return false;
Seat other = ( Seat ) obj;
if ( seatNumber != other.seatNumber )
return false;
return true;
}
}
Flight:
import java.util.HashMap;
public class Flight
{
private HashMap<Seat, Passenger> seatMap;
public Flight(int numberOfSeats)
{
seatMap = new HashMap<>();
for(int i = 1; i <= numberOfSeats; i++)
{
seatMap.put ( new Seat ( i ) , new Passenger ( ) );
}
}
/**
* @return the seatMap
*/
public HashMap < Seat , Passenger > getSeatMap ( )
{
return seatMap;
}
/**
* @param seatMap the seatMap to set
*/
public void setSeatMap ( HashMap < Seat , Passenger > seatMap )
{
this.seatMap = seatMap;
}
public void sitPassenger (int seatNumber, Passenger passenger)
{
seatMap.put ( new Seat ( seatNumber ) , passenger );
}
@Override
public String toString ( )
{
return "Flight [seatMap=" + seatMap + "]";
}
}
MainClass:
public class mainProgram
{
public static void main(String args [])
{
//set number of seats
Flight myFlight = new Flight ( 3 );
//first passenger
Passenger firstP = new Passenger ( );
firstP.setSocialNumber ( 19993 );
firstP.setName ( "John" );
//second passenger
Passenger secondP = new Passenger ( );
secondP.setSocialNumber ( 19994 );
secondP.setName ( "Brian" );
//sit them
myFlight.sitPassenger ( 1 , firstP );
myFlight.sitPassenger ( 2 , secondP );
//output
System.out.println ( myFlight.toString ( ) );
}
}
Output:
Flight [seatMap={
Seats [seatNumber=1]=Passenger [socialNumber=19993, name=John],
Seats [seatNumber=2]=Passenger [socialNumber=19994, name=Brian],
Seats [seatNumber=3]=Passenger [socialNumber=0, name=OPEN]
}]
This solution allow to have the same passenger on different flights (seats) which an Airplane seat reserve program should do, IMHO.