循环队列错误,显示选项充当删除选项。 [Java OOP]

时间:2018-04-04 15:16:37

标签: java oop queue

所以我有这项任务,旨在模拟在登机口等候的乘客,我们需要创建一个具有不同选项的菜单。为此,我们必须有两个类和一个主程序,整个事情应该基于一个循环队列。

在尝试进行循环队列时,我偶然发现了标题中提到的问题。当我向队列中添加项目时,一旦我尝试使用菜单中的选项显示它们,队列就会弹出第一个项目,除非调用菜单中的选项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]);
}

}

1 个答案:

答案 0 :(得分:0)

你错过了之后的 break; 声明 类机场主要方法中的 queue1.display(); 所以下一个案例'D'已经执行。