如何基于含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); } } }
关键细节说明
- 输入处理:用
Scanner.nextLine()逐行读取输入,trim()去除首尾空格,split("\\s+")拆分参数(支持多个空格分隔,更灵活) - 容错处理:加入了参数数量检查和数字格式异常捕获,避免非法输入直接导致程序崩溃
- 存储灵活性:先用
ArrayList存储对象,最后通过toArray()方法转换为CarModel数组,兼顾灵活性和需求中的数组存储要求 - 验证方便:重写了
CarModel的toString()方法,方便打印查看对象内容
测试方式
运行程序后,输入你提供的内容:
MODEL Camry 6.5 58 MODEL Civic 7.5 52 FINISH
程序会创建两个CarModel对象,存储到数组后打印出所有车型的信息。
内容的提问来源于stack exchange,提问作者user12136842
相关产品推荐
相关产品推荐

