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

Arduino中如何通过车手发车编号获取对应车手名称?

根据发车编号查询车手名称的实现方案

我有一组车手发车编号与车手名称的对应关系(比如20对应车手A,44对应车手B,4对应车手C……),需要根据给定的发车编号查询对应的车手名称,有哪些可行的实现方案?

你当前的实现思路:Switch分支判断

你的代码思路没问题,补全默认分支可以避免编译问题,调整后的代码如下:

String getDriverName(int startNumber) {
    switch(startNumber) {
        case 20:
            return "车手A";
        case 44:
            return "车手B";
        case 4:
            return "车手C";
        default:
            return "未知车手"; // 处理未匹配的编号
    }
}

这个方案适合对应关系数量少、固定不变的场景,代码直观,但如果后续要新增或删除车手,就得修改switch里的代码,数量多了维护起来比较麻烦。


方案2:哈希表(Map)实现

这是最常用也最灵活的方案,查询效率高,还能轻松动态调整对应关系:

// 初始化映射关系,建议放在程序初始化阶段只执行一次
Map<Integer, String> driverMap = new HashMap<>();
driverMap.put(20, "车手A");
driverMap.put(44, "车手B");
driverMap.put(4, "车手C");

// 查询方法
String getDriverName(int startNumber) {
    // 找不到时返回默认值"未知车手"
    return driverMap.getOrDefault(startNumber, "未知车手");
}

不管是新增车手、修改编号还是删除条目,直接操作driverMap就行,不用改查询逻辑,适合对应关系数量较多或者需要动态调整的场景。


方案3:数组索引映射(编号连续时适用)

如果发车编号是连续的整数,且范围不大(比如编号在1到50之间),可以用数组来实现,查询效率比哈希表还高:

// 假设最大编号是50,数组索引对应发车编号(索引0可以不用)
String[] driverArray = new String[51];
driverArray[20] = "车手A";
driverArray[44] = "车手B";
driverArray[4] = "车手C";

// 查询方法
String getDriverName(int startNumber) {
    // 先判断编号是否在有效范围内
    if (startNumber >= 1 && startNumber < driverArray.length) {
        return driverArray[startNumber] != null ? driverArray[startNumber] : "未知车手";
    }
    return "未知车手";
}

这个方案的优点是查询速度极快,但缺点也很明显——如果编号不连续或者范围很大,会浪费大量内存,所以只适合编号连续且范围可控的情况。


方案4:枚举类实现(固定对应关系专用)

如果车手的编号和名称是固定不变的,用枚举类是个不错的选择,类型安全还能扩展更多属性:

enum Driver {
    DRIVER_A(20, "车手A"),
    DRIVER_B(44, "车手B"),
    DRIVER_C(4, "车手C");

    private final int startNumber;
    private final String name;

    // 枚举构造方法
    Driver(int startNumber, String name) {
        this.startNumber = startNumber;
        this.name = name;
    }

    // 根据编号查询对应的枚举实例
    public static Driver getByStartNumber(int startNumber) {
        for (Driver driver : Driver.values()) {
            if (driver.startNumber == startNumber) {
                return driver;
            }
        }
        return null;
    }

    // 获取车手名称
    public String getName() {
        return name;
    }
}

// 使用示例
String getDriverName(int startNumber) {
    Driver driver = Driver.getByStartNumber(startNumber);
    return driver != null ? driver.getName() : "未知车手";
}

枚举类的好处是把车手的相关信息封装在一起,后续如果要给车手加其他属性(比如车队、国籍),直接在枚举里加字段就行,代码可读性和维护性都很好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:15:34