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项目名称:汉堡炸玉米饼
我是数据结构的新手,我将非常感谢任何帮助,建议和建议.谢谢.
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)