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
相关产品推荐
相关产品推荐

