java:在构造函数中递增id以在main中显示

Tia*_*Tia 1 java arraylist data-structures

我正在编写一个程序来模拟咖啡店中的系统,其中接受客户订单的人给每个客户一个代币号,并将客户的代币号和他/她订购的物品一起输入系统.该recordOrder功能执行该操作,该操作允许输入订单细节,订单由票证ID,tID和表示订单中的项目的字符串的数组列表示.

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

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

public class Ques4 {

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

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

    }

    public int getOrderId(){
        return orderId;
    }

    public void setOrderId(int orderId){
        this.orderId=orderId;
    }

    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 String toString(){
        return "Token num: "+gettID()+ " Item name: "+getItemName();
    }*/

}

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());}   
       }
 }
Run Code Online (Sandbox Code Playgroud)

在我的Order类中,我自动递增了令牌编号,这样第一个订单的标记号为1,第二个订单号为2,依此类推.问题是令牌号增加到订单数量,订单数量将作为令牌号码打印出来.这是假设我输入订单数量num_Orders为3,我得到令牌数量的输出:3项目名称:cheesecake

令牌数:3项目名称:薯条

令牌号码:3项目名称:汉堡

正如我在上面的输出中所示,只打印了我为特定订单输入的一个和最后一个项目.

编辑:

我想要的输出是假设我输入2作为订单数量,然后我将被提示输入令牌编号1作为第一个订单的项目数量,而令牌编号2的项目数量是第二个订单.我将进一步提示分别输入令牌号1和2的项目名称.这是我想要显示的内容:

输入订单数量.

2

输入令牌编号的项目数:1

2

输入项目:

薯条

芝士蛋糕

输入令牌编号的项目数:2

2

输入项目:

汉堡包

玉米饼

令牌数:1项目名称:薯条芝士蛋糕

代币:2项目名称:汉堡炸玉米饼

我是数据结构的新手,我将非常感谢任何帮助,建议和建议.谢谢.

Era*_*ran 5

public Order(String itemName){
    tID++;
    this.tID=tID;
    this.itemName=itemName;
}
Run Code Online (Sandbox Code Playgroud)

从这个构造函数看起来你打算在你的Order类中有两个成员,一个静态计数器和一个实例变量作为标识符,但你对两者都使用了相同的静态变量.

你需要两个变量:

private static int tID=0;
private int ID;
Run Code Online (Sandbox Code Playgroud)

然后在构造函数中:

public Order(String itemName){
    tID++;
    this.ID=tID;
    this.itemName=itemName;
}
Run Code Online (Sandbox Code Playgroud)

当然你也必须改变getter和setter(他们应该使用ID,而不是tID).

编辑:

这段代码似乎还有另一个问题:

for(int i=0; i<n;i++){
    item=sc.nextLine();
}
listOfItems.add(new Order(item));
Run Code Online (Sandbox Code Playgroud)

根据您的问题的描述,您想要将项添加到循环内的列表:

for(int i=0; i<n;i++){
    item=sc.nextLine();
    listOfItems.add(new Order(item));
}
Run Code Online (Sandbox Code Playgroud)