所以我有这项任务,旨在模拟在登机口等候的乘客,我们需要创建一个具有不同选项的菜单。为此,我们必须有两个类和一个主程序,整个事情应该基于一个循环队列。
在尝试进行循环队列时,我偶然发现了标题中提到的问题。当我向队列中添加项目时,一旦我尝试使用菜单中的选项显示它们,队列就会弹出第一个项目,除非调用菜单中的选项delete,否则不会这样做。此外,如果我调用delete和view选项,队列将删除两个项目。总结一下:
关于如何解决这个问题的任何建议都值得赞赏,因为我已经连续几个小时尝试,我以不同的方式重新编写了几次乘客排队等级,但仍然是相同的,目前我没有想法如何解决它。
该计划如下:
主:
public class Airport {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
PassengerQueue queue1= new PassengerQueue();
Passenger[] ArrayOfPassenger = new Passenger[20];
Scanner input= new Scanner (System.in);
String optionMenu;
for (int i=0; i<20; i++)
ArrayOfPassenger[i]= new Passenger();
char letter;
do {
System.out.println("Enter display option [A-add passenger, V- view passenger queue, D- delete passenger from queue, S- store passengerQueue data into file, L- load passengerQueue data from file] or 'X' to stop: ");
optionMenu = input.next();
letter = optionMenu.charAt(0);
switch (letter) {
case 'A':
queue1.AddPassenger();
break;
case 'V':
queue1.display();
case 'D':
queue1.removePassenger();
break;
case 'S':
break;
case 'L':
break;
}
} while (letter != 'X');
}
}
乘客类:
public class Passenger {
private String firstName;
private String surname;
private int secondsInQueue;
Scanner input= new Scanner(System.in);
/**
*
* @return
*/
public String getname(){
return firstName= " "+surname;
}
public void setName (String fName, String sName){
firstName=fName;
surname=sName;
}
public Passenger (){
firstName= "";
surname="";
}
public String toString() {
return firstName + " " + surname;
}
PassengerQueue类,它有问题:
public class PassengerQueue {
Scanner input= new Scanner(System.in);
private Passenger[] qArray =new Passenger [20];
private int first = 0;
private int last = 0;
private int maxStayInQueue;
static final int MAX_QUEUE_SIZE = 20;
public PassengerQueue() {
for (int i = 0;i < 20; i++)
qArray[i]= new Passenger();
}
public void AddPassenger() {
System.out.println("Enter passenger's First Name:");
String FirstName = input.next();
System.out.println("Enter passenger's surname:");
String Surname= input.next();
qArray[last].setName(FirstName, Surname);
last++;
if(last == qArray.length+1){
last = 0;
}
}
public boolean isEmpty() {
return first == 0;
}
public boolean isFull() {
return last == 19;
}
public void removePassenger(){
Passenger x;
x= qArray[first];
qArray[first].setName("","");
first=first+1;
if(first==qArray.length+1)
first=0;
}
public void display() {
System.out.println("The queue: ");
for(int i = first; i < last; i++)
System.out.println(qArray[i]);
}
}
答案 0 :(得分:0)
你错过了之后的 break; 声明 类机场主要方法中的 queue1.display(); 所以下一个案例'D'已经执行。