首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java:使用getter从数组列表中检索和打印项目

Java:使用getter从数组列表中检索和打印项目
EN

Stack Overflow用户
提问于 2016-01-15 20:15:26
回答 3查看 774关注 0票数 0

我正在编写一个程序来模拟咖啡店中的一个系统,在该系统中,接受客户订单的人给客户一个令牌号,并将客户的令牌号与所订购的商品一起输入系统。recordOrder函数执行此操作,该操作允许输入订单详细信息。订单由表示订单中的项的令牌ID、tID和字符串的arrayList表示。

以下是我迄今所做的工作:

代码语言:javascript
运行
复制
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,项目名称为奶酪蛋糕、玉米煎饼、玉米饼,只有玉米饼打印出来,输出结果如下:

令牌num: 9项名称: tacos

相反,应该是:

令牌num: 9个商品名称:芝士蛋糕玉米煎饼卷

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-15 20:17:55

代码语言:javascript
运行
复制
for(int i=0; i<n;i++){
    item=sc.nextLine();
    listOfItems.add(new Order(tnum, item));
}

添加项的逻辑应该在循环中。由于要在循环之外添加它,因此只添加了一个元素(即最后一个元素)。

编辑:以打印所需的方式:

代码语言:javascript
运行
复制
System.out.print("Token num: "+list.gettID()+ " Item name:");
for(Order list: listOfItems){
     System.out.print(" "+list.getItemName());
}   
System.out.println();
票数 2
EN

Stack Overflow用户

发布于 2016-01-15 20:22:48

我想你想要这个:

代码语言:javascript
运行
复制
for(int i=0; i<n;i++){
    item += sc.nextLine();
}

listOfItems.add(new Order(tnum, item));

这将将这些项追加到每次为for循环构建的字符串中,而不是每次覆盖变量。

票数 0
EN

Stack Overflow用户

发布于 2016-01-15 20:26:13

如果必须向一个对象添加更多项,则需要将itemName初始化为字符串数组。

代码语言:javascript
运行
复制
String[] itemName;

在setter方法中,添加到字符串中,而不是用新值替换整个值。这就是为什么您只获得最新的输入值。

代码语言:javascript
运行
复制
 public void setItemName(String itemName) {
        this.itemName.add(itemName);
    }

类似地,您可以处理getter以输出字符串数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34819153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档