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

如何在循环中接收控制台输入并创建ProductMaster类实例添加到列表

没问题!我来帮你搞定这个需求。你想要通过循环读取控制台输入,动态创建ProductMaster实例并添加到列表中,下面是完整的可运行实现,附带关键部分的说明:

动态创建ProductMaster实例并添加到列表的实现方案

首先我们需要借助Scanner类来读取控制台输入,然后在循环中收集产品信息、创建实例并加入列表。这里我会补全你的类代码,同时实现核心功能:

完整代码示例

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ProductMaster {
    String productName;
    double productPrice;
    // 补全你提到的其他字段
    int discountQuantity;
    double discountPrice;

    // 无参构造器
    ProductMaster() { }

    // 带参构造器(匹配你给出的参数定义)
    ProductMaster(String prodN, double prodP, int discQ, double discP) {
        this.productName = prodN;
        this.productPrice = prodP;
        this.discountQuantity = discQ;
        this.discountPrice = discP;
    }

    public static void main(String[] args) {
        // 创建存储产品实例的列表
        List<ProductMaster> productList = new ArrayList<>();
        Scanner inputScanner = new Scanner(System.in);

        // 先让用户指定要创建的产品数量,也可以改成无限循环(比如输入exit结束)
        System.out.print("请输入要创建的产品总数:");
        int totalProducts = inputScanner.nextInt();
        inputScanner.nextLine(); // 读取残留的换行符,避免后续读取字符串出错

        // 循环创建产品实例
        for (int i = 0; i < totalProducts; i++) {
            System.out.println("\n===== 输入第" + (i + 1) + "个产品信息 =====");
            
            System.out.print("产品名称:");
            String prodName = inputScanner.nextLine();
            
            System.out.print("产品原价:");
            double prodPrice = inputScanner.nextDouble();
            
            System.out.print("折扣门槛数量:");
            int discQty = inputScanner.nextInt();
            
            System.out.print("折扣后价格:");
            double discPrice = inputScanner.nextDouble();
            inputScanner.nextLine(); // 再次读取换行符,为下一轮输入做准备

            // 创建实例并添加到列表
            ProductMaster newProduct = new ProductMaster(prodName, prodPrice, discQty, discPrice);
            productList.add(newProduct);
        }

        inputScanner.close(); // 关闭Scanner释放资源

        // 可选:验证列表中的内容
        System.out.println("\n===== 已创建的产品列表 =====");
        for (ProductMaster product : productList) {
            System.out.printf("名称:%s | 原价:%.2f | 折扣数量:%d | 折扣价:%.2f\n",
                    product.productName, product.productPrice,
                    product.discountQuantity, product.discountPrice);
        }
    }
}

关键细节说明

  • Scanner的换行符处理:每次用nextInt()或nextDouble()读取数值后,控制台会残留一个换行符,必须用nextLine()读取掉,否则下一次读取字符串会直接拿到空内容。
  • 循环灵活性:示例中用固定数量控制循环,你也可以改成无限循环,比如当用户输入exit作为产品名称时退出,代码如下:
// 替换原循环的替代方案:按需添加产品,输入exit结束
System.out.println("请输入产品信息,输入'exit'作为产品名称结束输入:");
while (true) {
    System.out.print("产品名称:");
    String prodName = inputScanner.nextLine();
    if ("exit".equalsIgnoreCase(prodName)) {
        break;
    }

    // 后续的价格、折扣信息读取逻辑和之前一致
    // ...
}
  • 实例创建与存储:每次循环收集完所有参数后,调用带参构造器创建ProductMaster实例,再通过List.add()方法将实例存入列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:34:26