我正在编写一个程序来模拟一所大学的系统,在该学院中,学生们加入了在自助餐厅点午餐的队列,每位学生下订单时都会得到一张票号,然后就座。当订单准备好时,对应于该订单的票号显示在屏幕上,学生可以移至柜台领取午餐。柜台人员可以执行三个操作,即recordOrderrequestCollectiondisplayPendingOrderrecordOrder操作允许输入订单详细信息,订单由票证ID,tID和表示订单中项目的字符串数组组成。当requestCollection操作从厨房到达时(即订单已准备就绪),它会从队列中删除第一笔订单。 displayPendingOrder操作显示所有尚未交付的订单。订单以与接收订单相同的顺序交付,即先进先出。

到目前为止,这是我所做的:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;

public class Order_Main {
    private static class Order{
        private static int tID=0;
        private String itemName;

        public Order(String itemName){
            tID++;
            this.tID=tID;
            this.itemName=itemName;
        }

        public int gettID() {
            return tID;
        }

        public void settID(int tID) {
            this.tID = tID;
        }

        public String getItemName() {
            return itemName;
        }

        public void setItemName(String itemName) {
            this.itemName = itemName;
        }
    }

    public static void main(String[] args) {
        ArrayList<Order> listOfItems= new ArrayList<Order>();
        recordOrder(listOfItems);
    }

    private static void recordOrder(ArrayList<Order> listOfItems){
        int n, num_Orders;
        String item = null;

        Scanner sc= new Scanner(System.in);

        System.out.println("Enter the number of orders.");
        num_Orders= sc.nextInt();

        for(int j=0; j<num_Orders;j++){
            System.out.println("Enter the number of items for token number "+(j+1));
            n=sc.nextInt();
            sc.nextLine();

            System.out.println("Enter the items: ");

            for(int i=0; i<n;i++){
                item=sc.nextLine();
            }

            listOfItems.add(new Order(item));
        }

        for(Order list: listOfItems){
            System.out.println("Token num: "+list.gettID()+ " Item name: "+list.getItemName());
        }
    }
}


我目前仅实现了recordOrder函数,但是这里面临一些问题:


在我的Order类中,我已自动增加了令牌号,以便第一顺序的令牌号为1,第二顺序的令牌号为2,依此类推。
问题是令牌编号正逐渐增加到订单数量,并且订单数量作为令牌编号被打印出来。
假设我输入的订单数量num_Orders为3,我得到的输出为


代币号:3项目名称:芝士蛋糕

代币编号:3商品名称:薯条

代币号:3产品名称:汉堡


正如我在上面的输出中所示,仅打印出我为特定订单输入的一个和最后一个项目。
我不知道如何将令牌和字符串数组列表添加到队列中,以便执行其他操作。


我是数据结构的新手,并且仍在学习中,因此非常感谢您的任何帮助,建议和建议。

最佳答案

您正在尝试将静态变量tID用作成员变量。您需要另一个非静态成员变量,该变量跟踪分配了订单的递增ID。

private static int tID=0;
private int orderId;
private String itemName;

public Order(String itemName){
    tID++;
    this.orderId = tID; //use this.orderId in the rest of Order's functions
    this.itemName = itemName;

}

09-26 11:51