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

如何基于含MODEL标识的输入创建CarModel对象并存储至数组

实现基于输入文本创建CarModel对象并存储的方案

没问题,我来帮你搞定这个需求!咱们可以通过逐行读取输入、解析指令的方式来实现,下面是具体的思路和完整代码:

核心逻辑

  • 用Scanner逐行读取输入内容,判断每一行的指令标识
  • 遇到MODEL开头的行,拆分后续的参数,转换对应类型后创建CarModel实例,存入集合(用ArrayList比固定数组更灵活,最后可以轻松转成数组)
  • 遇到FINISH指令时,立即终止输入读取,结束程序

完整实现代码

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

class CarModel {
    private String name;
    private double fuelEconomy;
    private double gasTankSize;

    CarModel(String name, double fuelEconomy, double gasTankSize) {
        this.name = name;
        this.fuelEconomy = fuelEconomy;
        this.gasTankSize = gasTankSize;
    }

    String getName() { return name; }
    double getFuelEconomy() { return fuelEconomy; }
    double getGasTankSize() { return gasTankSize; }

    // 可选:重写toString方法,方便查看对象内容
    @Override
    public String toString() {
        return "CarModel{" +
                "name='" + name + '\'' +
                ", fuelEconomy=" + fuelEconomy +
                ", gasTankSize=" + gasTankSize +
                '}';
    }
}

public class CarModelProcessor {
    public static void main(String[] args) {
        // 用List存储车型,避免固定数组长度的限制
        List<CarModel> carList = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入内容(输入FINISH结束):");
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine().trim();
            // 跳过空行,避免无效处理
            if (line.isEmpty()) {
                continue;
            }
            // 拆分一行内容,支持多个空格分隔参数
            String[] parts = line.split("\\s+");
            
            if (parts[0].equalsIgnoreCase("MODEL")) {
                // 检查参数数量是否符合要求
                if (parts.length != 4) {
                    System.out.println("输入格式错误!正确格式应为:MODEL [车型名称] [燃油经济性] [油箱容量]");
                    continue;
                }
                try {
                    // 解析参数并创建CarModel对象
                    String modelName = parts[1];
                    double fuelEfficiency = Double.parseDouble(parts[2]);
                    double tankSize = Double.parseDouble(parts[3]);
                    carList.add(new CarModel(modelName, fuelEfficiency, tankSize));
                    System.out.println("已成功添加车型:" + modelName);
                } catch (NumberFormatException e) {
                    System.out.println("数值格式错误!请输入有效的数字值。");
                }
            } else if (parts[0].equalsIgnoreCase("FINISH")) {
                System.out.println("输入结束,开始处理已存储的车型...");
                break;
            } else {
                System.out.println("未知指令!请输入MODEL添加车型,或输入FINISH结束程序。");
            }
        }
        scanner.close();

        // 将List转换为数组(如果需要数组形式的存储结果)
        CarModel[] carArray = carList.toArray(new CarModel[0]);

        // 可选:打印所有存储的车型,验证结果
        System.out.println("\n所有已存储的车型信息:");
        for (CarModel car : carArray) {
            System.out.println(car);
        }
    }
}

关键细节说明

  1. 输入处理:用Scanner.nextLine()逐行读取输入,trim()去除首尾空格,split("\\s+")拆分参数(支持多个空格分隔,更灵活)
  2. 容错处理:加入了参数数量检查和数字格式异常捕获,避免非法输入直接导致程序崩溃
  3. 存储灵活性:先用ArrayList存储对象,最后通过toArray()方法转换为CarModel数组,兼顾灵活性和需求中的数组存储要求
  4. 验证方便:重写了CarModel的toString()方法,方便打印查看对象内容

测试方式

运行程序后,输入你提供的内容:

MODEL Camry 6.5 58
MODEL Civic 7.5 52
FINISH

程序会创建两个CarModel对象,存储到数组后打印出所有车型的信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:08:55