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

如何通过Scanner从控制台选择已创建对象添加至ArrayList?

解决方案:通过控制台选择已创建的Car实例添加到集合

Scanner本身没有nextCar()这类读取自定义对象的方法,因为它仅支持Java标准数据类型的读取。要实现需求,核心思路是通过用户输入的标识(数字/字符串)映射到已创建的Car实例,以下是两种可行方案:

方案一:数字选择映射

给每个已创建的Car实例分配唯一数字标识,读取用户输入的数字后,通过条件判断匹配对应实例并添加到集合。

示例代码

首先定义简单的Car类:

class Car {
    private String model;
    public Car(String model) {
        this.model = model;
    }

    @Override
    public String toString() {
        return "Car{model='" + model + "'}";
    }
}

主程序实现:

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

public class CarCollectionDemo {
    public static void main(String[] args) {
        // 已创建的Car实例
        Car c1 = new Car("Model A");
        Car c2 = new Car("Model B");
        Car c3 = new Car("Model C");

        ArrayList<Car> carList = new ArrayList<>();
        carList.add(c1);
        carList.add(c2);

        Scanner input = new Scanner(System.in);

        // 提示用户选择
        System.out.println("请选择要添加的Car实例(输入对应数字):");
        System.out.println("1 - c1 (Model A)");
        System.out.println("2 - c2 (Model B)");
        System.out.println("3 - c3 (Model C)");

        int choice = input.nextInt();
        input.nextLine(); // 清除输入缓冲区的换行符

        // 根据选择添加实例,可选去重判断
        switch (choice) {
            case 1:
                addIfNotExists(carList, c1);
                break;
            case 2:
                addIfNotExists(carList, c2);
                break;
            case 3:
                addIfNotExists(carList, c3);
                break;
            default:
                System.out.println("无效选择");
        }

        // 验证集合内容
        System.out.println("\n当前集合中的Car实例:");
        carList.forEach(System.out::println);

        input.close();
    }

    // 工具方法:避免重复添加
    private static void addIfNotExists(ArrayList<Car> list, Car car) {
        if (!list.contains(car)) {
            list.add(car);
            System.out.println("已添加实例:" + car);
        } else {
            System.out.println("实例已存在于集合中");
        }
    }
}

方案二:实例名称字符串映射

如果希望用户输入实例名(如"c3")来选择,可以用HashMap建立实例名称到对象的映射关系,读取用户输入的字符串后直接从Map中取出对应实例。

示例代码

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class CarCollectionDemo {
    public static void main(String[] args) {
        Car c1 = new Car("Model A");
        Car c2 = new Car("Model B");
        Car c3 = new Car("Model C");

        ArrayList<Car> carList = new ArrayList<>();
        carList.add(c1);
        carList.add(c2);

        // 建立实例名称与对象的映射
        HashMap<String, Car> carMap = new HashMap<>();
        carMap.put("c1", c1);
        carMap.put("c2", c2);
        carMap.put("c3", c3);

        Scanner input = new Scanner(System.in);

        System.out.println("请输入要添加的Car实例名称(如c3):");
        String choice = input.nextLine();

        if (carMap.containsKey(choice)) {
            Car selectedCar = carMap.get(choice);
            addIfNotExists(carList, selectedCar);
        } else {
            System.out.println("不存在该实例");
        }

        // 验证集合内容
        System.out.println("\n当前集合中的Car实例:");
        carList.forEach(System.out::println);

        input.close();
    }

    private static void addIfNotExists(ArrayList<Car> list, Car car) {
        if (!list.contains(car)) {
            list.add(car);
            System.out.println("已添加实例:" + car);
        } else {
            System.out.println("实例已存在于集合中");
        }
    }
}

核心说明

Scanner无法直接读取自定义类对象,必须通过中间标识将用户输入和已存在的对象关联起来。两种方案的本质都是通过映射关系,把用户输入转化为对已有Car实例的引用,进而完成添加操作。

内容的提问来源于stack exchange,提问作者Nicolás Ortega Muñoz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:41:13