Java: 在构造函数中自动递增 id 并将项目添加到 arraylist
Java: auto incrementation of id in constructor and adding items to arraylist
我正在编写一个程序来模拟大学中的一个系统,学生在自助餐厅排队订购午餐,每个学生在下订单时都会得到一个票号,然后他就座。订单准备好后,屏幕上会显示订单对应的票号,学生可以前往柜台领取午餐。柜台人员可以进行recordOrder
、requestCollection
、displayPendingOrder
三种操作。 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
功能,但我面临着一些问题:
- 在我的
Order
class 中,我自动增加了令牌编号,因此第一个订单的令牌编号为 1,第二个订单的令牌编号为 2,依此类推。
问题是代币数增加到订单数,而订单数作为代币数打印出来。
假设我输入订单数 num_Orders
作为 3,我得到的输出是
代币数量:3 物品名称:芝士蛋糕
令牌数:3 物品名称:薯条
代币数量:3 物品名称:汉堡
正如我在上面的输出中所示,只有我为特定订单输入的最后一项被打印出来。
我不知道如何将令牌和字符串数组列表添加到队列中,以便我可以执行其他操作。
我是数据结构的新手,仍在学习中,因此非常感谢您提供任何帮助、意见和建议。
您正在尝试将静态变量 tID 用作成员变量。您需要另一个 non-static 成员变量来跟踪分配给订单的递增 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;
}
建议大家不要使用classorder
里面的令牌计数器(tID)
,因为order
class不一定知道关于如何计算令牌,如果在 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());}
}
}
我正在编写一个程序来模拟大学中的一个系统,学生在自助餐厅排队订购午餐,每个学生在下订单时都会得到一个票号,然后他就座。订单准备好后,屏幕上会显示订单对应的票号,学生可以前往柜台领取午餐。柜台人员可以进行recordOrder
、requestCollection
、displayPendingOrder
三种操作。 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
功能,但我面临着一些问题:
- 在我的
Order
class 中,我自动增加了令牌编号,因此第一个订单的令牌编号为 1,第二个订单的令牌编号为 2,依此类推。 问题是代币数增加到订单数,而订单数作为代币数打印出来。 假设我输入订单数num_Orders
作为 3,我得到的输出是
代币数量:3 物品名称:芝士蛋糕
令牌数:3 物品名称:薯条
代币数量:3 物品名称:汉堡
正如我在上面的输出中所示,只有我为特定订单输入的最后一项被打印出来。
我不知道如何将令牌和字符串数组列表添加到队列中,以便我可以执行其他操作。
我是数据结构的新手,仍在学习中,因此非常感谢您提供任何帮助、意见和建议。
您正在尝试将静态变量 tID 用作成员变量。您需要另一个 non-static 成员变量来跟踪分配给订单的递增 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;
}
建议大家不要使用classorder
里面的令牌计数器(tID)
,因为order
class不一定知道关于如何计算令牌,如果在 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());}
}
}