【问题标题】:Java: auto incrementation of id in constructor and adding items to arraylistJava:在构造函数中自动增加id并将项目添加到arraylist
【发布时间】:2016-01-14 20:19:32
【问题描述】:

我正在编写一个程序来模拟一所大学的系统,在该系统中,学生在自助餐厅排队点餐,每个学生在下订单时都会得到一个票号,然后他就坐。当订单准备好时,对应订单的票号会显示在屏幕上,学生可以移动到柜台领取他的午餐。柜台人员可以进行recordOrderrequestCollectiondisplayPendingOrder三种操作。 recordOrder 操作允许输入订单详细信息,订单由工单 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 功能,但这里有一些我面临的问题:

  1. 在我的Order 课程中,我已经自动增加了令牌编号,因此第一个订单的令牌编号为 1,第二个订单的令牌编号为 2,依此类推。 问题是令牌编号增加到订单数量,并且订单数量作为令牌编号打印出来。 假设我输入订单数量num_Orders 为 3,我得到的输出是

代币数:3 物品名称:芝士蛋糕

代币数量:3 物品名称:薯条

代币数量:3 商品名称:汉堡

  1. 正如我在上面的输出中所示,只有我为特定订单输入的一项和最后一项被打印出来。

  2. 我不知道如何将令牌和字符串数组列表添加到队列中,以便执行其他操作。

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

【问题讨论】:

    标签: java arraylist data-structures queue


    【解决方案1】:

    您正在尝试使用静态变量 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;
    
    }
    

    【讨论】:

    • 即使我也为orderId 添加了setter 和getter,它仍然没有任何区别。输出是一样的。
    【解决方案2】:

    我建议你不要在order 类中使用令牌计数器(tID),因为order 类不必知道你如何计算令牌,如果你在里面处理令牌计数器会更好main 函数,如下所示:

      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 int orderID;
        private String itemName;
    
        public Order(int orderID,String itemName){
            this.orderID=orderID;
            this.itemName=itemName;
    
        }
    
        public int getOrderID() {
            return orderID;
        }
    
        public void setOrderID(int orderID) {
            this.orderID = orderID;
        }
    
        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(j,item));
    
        }
    
     for(Order list: listOfItems){
         System.out.println("Token num: "+list.getOrderID()+ " Item name: "+list.getItemName());}   
    
          }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-27
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 2021-05-16
      • 2019-04-22
      • 2013-04-13
      相关资源
      最近更新 更多