我正在编写一个程序来模拟咖啡店中的系统,其中接受客户订单的人向客户提供代币号并将该客户的代币号连同物品进入系统订购了。 recordOrder函数执行此操作,允许输入订单详细信息。订单由令牌ID,tID和表示订单中项目的字符串arrayList表示。
这是我到目前为止所做的:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Ques4 {
private static class Order{
private int tID;
private int orderId;
private String itemName;
public Order(int tID,String itemName){
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 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, tnum;
int num_Orders;
String item = null;
Scanner sc= new Scanner(System.in);
System.out.println("Enter the token number: ");
tnum= sc.nextInt();
System.out.println("Enter the number of items for token number: "+tnum);
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(tnum, item));
for(Order list: listOfItems){
System.out.println("Token num: "+list.gettID()+ " Item name: "+list.getItemName());}
}
}
问题是我输入的最后一个项目正在打印出来,也就是说,假设我输入的标记号为9,项目数为3,项目名称为芝士蛋糕,墨西哥卷饼,炸玉米饼,只有炸玉米饼正在打印出来,输出将是这样的:
Token num:9项目名称:tacos
应该是:
Token num:9商品名称:cheesecake burritos tacos
答案 0 :(得分:2)
for(int i=0; i<n;i++){
item=sc.nextLine();
listOfItems.add(new Order(tnum, item));
}
添加项目的逻辑应该在循环中。由于您是在循环外添加它,因此只添加一个元素(即最后一个元素)
修改强> 打印所需的方式:
System.out.print("Token num: "+list.gettID()+ " Item name:");
for(Order list: listOfItems){
System.out.print(" "+list.getItemName());
}
System.out.println();
答案 1 :(得分:0)
我想你想要这个:
for(int i=0; i<n;i++){
item += sc.nextLine();
}
listOfItems.add(new Order(tnum, item));
这会将项目附加到您每次为for循环构建的String中,而不是每次都覆盖变量。
答案 2 :(得分:0)
如果必须向一个对象添加更多项,则需要将itemName初始化为String数组。
String[] itemName;
在你的setter方法中,添加到字符串而不是用新的值替换整个值。这就是您只获得最新输入值的原因。
public void setItemName(String itemName) {
this.itemName.add(itemName);
}
类似地,您可以处理getter以输出String数组。