我正在航空预订系统上创建OOP。飞机将拥有头等舱(2排,每排4个座位(座位为ABCD))和经济舱(20排,每排6个座位(座位为ABCDEF)。行由过道隔开。
用户将输入他的姓名,班级规格和座位偏好([W] indow,[A] isle,[C] enter),并且会找到第一个可供用户加入的座位。
EX。
姓名:约翰史密斯 类别:经济 座位偏好:[C]输入
结果:
第3行座位B名称John Smith
我的问题是如何通过适当的座位安排创建第一个和经济型施工人员?我会使用arraylist吗?或者每排有座位和座位的二维阵列?或完全不同的东西?
谢谢!
答案 0 :(得分:1)
从座位类开始,具有属性位置:窗口,中心,过道和位置' A',' B',...
public enum Location { WINDOW, CENTER, AISLE }
public class Seat {
private Location loc;
private char pos; // A, B, C...
public Seat( Location loc, char pos ){...}
//...
}
创建类Row,子类到Business和Economy:构造函数负责创建适当的席位。席位可以在列表中,并将数字添加为行的属性。
public abstract class Row {
private int number;
private List<Seat> seats = new ArrayList<>();
protected Row( int number ){ ... }
public void addSeat( Seat seat ){...}
public Seat findSeat( Location loc ){...}
}
public class Business extends Row {
public Business( int number ){
super( number );
addSeat( Location.WINDOW, 'A' ); // continue as required
}
}
public class Economy extends Row {
public Economy( int number ){
super( number );
addSeat( Location.WINDOW, 'A' );
addSeat( Location.CENTER, 'B' ); // continue as required
}
}
使用Business and Economy创建填充其List<Row>
的类Plane,设置行号(确保省略行 number 13)。
public class Plane {
private static final NUM_BUSINESS = 2;
private static final NUM_ECONOMY = 20;
private List<Row> rows = new ArrayList<>();
public Plane(){
int iRow = 1;
for( int i = 0; i < NUM_BUSINESS; ++i ){
rows.add( new Business( iRow++ ) );
}
// similar for Economy
}
public Seat findSeat( boolean business, Location loc ){
// ...
}
}