You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

简易POS系统订单信息展示问题:如何输出用户输入的全部商品?

问题根源

你当前的代码里,订单(Order)类应该是用单个变量存储商品(比如private Product product;),每次添加新商品时都会覆盖之前的对象,导致最终只保留最后一个商品。

修复步骤
  1. 修改Order类,改用集合存储商品
    把原来的单个Product变量换成List集合,这样就能存储多个商品了:
import java.util.ArrayList;
import java.util.List;

public class Order {
    private List<Product> products;
    private double total;

    public Order() {
        products = new ArrayList<>();
        total = 0.0;
    }

    // 新增商品到订单,同时累加总价
    public void addProduct(Product product) {
        products.add(product);
        total += product.getPrice();
    }

    public List<Product> getProducts() {
        return products;
    }

    public double getTotal() {
        return total;
    }
}
  1. 修改收据生成逻辑,遍历所有商品
    在打印收据的代码里,遍历Order里的商品集合,逐个输出每个商品的信息:
public void printReceipt(Order order) {
    System.out.println("===== 收据 =====");
    for (Product p : order.getProducts()) {
        System.out.printf("%-20s $%.2f%n", p.getName(), p.getPrice());
    }
    System.out.println("----------------");
    System.out.printf("总计: $%.2f%n", order.getTotal());
    System.out.println("===============");
}
  1. 调整商品添加流程
    在用户选择商品的循环里,每次选中商品后调用order.addProduct(selectedProduct),而不是用setter覆盖单个商品:
// 示例流程
Order order = new Order();
Scanner scanner = new Scanner(System.in);

while (true) {
    System.out.println("选择商品(输入编号,输入0结束):");
    // 这里写显示商品列表的逻辑
    int choice = scanner.nextInt();
    if (choice == 0) break;
    Product selected = getProductById(choice); // 根据编号获取对应商品
    if (selected != null) {
        order.addProduct(selected);
        System.out.println("已添加:" + selected.getName());
    } else {
        System.out.println("无效选择,请重新输入");
    }
}

// 打印最终收据
printReceipt(order);
验证效果

修改后,收据会正确输出所有添加的商品,比如:

===== 收据 =====
可乐 $3.00
汉堡 $10.00
薯条 $5.00

总计: $18.00

内容的提问来源于stack exchange,提问作者Abies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:25:21