Java中为带名称、等级依赖的高尔夫球杆对象高效分配乘数值的方法
方案设计思路
1. 基础数据结构定义
首先定义一个最简单的乘数对类,用来封装同等级下的最大、最小乘数,纯基础类实现,没有额外依赖:
// 存储单等级下的最大最小乘数 public class MultiplierPair { private double max; private double min; public MultiplierPair(double max, double min) { this.max = max; this.min = min; } // 只需要getter即可,配置初始化后不需要修改 public double getMax() { return max; } public double getMin() { return min; } }
2. 全局类表格配置实现
直接用HashMap+数组实现你要的类表格结构:
- Map的键为球杆名称,唯一对应每个球杆
- Map的值为长度11的
MultiplierPair数组,下标110直接对应球杆的110级,下标0空置不用避免等级和下标错位
import java.util.HashMap; // 全局球杆乘数配置类,类表格结构 public class ClubMultiplierConfig { // 核心存储结构:key=球杆名称,value=对应1-10级的乘数数组 private static final HashMap<String, MultiplierPair[]> MULTIPLIER_CONFIG = new HashMap<>(); // 静态块初始化所有球杆的乘数,你后续可以改成从本地文件/数据库加载 static { // 示例:初始化ROCKET球杆的1-10级乘数,其余球杆按相同格式补充即可 MultiplierPair[] rocketMultipliers = new MultiplierPair[11]; rocketMultipliers[1] = new MultiplierPair(1.2, 0.8); rocketMultipliers[2] = new MultiplierPair(1.3, 0.85); rocketMultipliers[3] = new MultiplierPair(1.35, 0.9); // 依次填写到10级即可 MULTIPLIER_CONFIG.put("ROCKET", rocketMultipliers); // 其他球杆按上面的格式批量补充,不需要单独定义60个数组变量,直接初始化塞到Map里就行 } // 对外提供获取配置的方法 public static HashMap<String, MultiplierPair[]> getMultiplierConfig() { return MULTIPLIER_CONFIG; } }
3. Club类适配修改
直接复用上面的配置即可,不需要额外的switch或者多层遍历:
public Club(String clubType, String clubName) { this.clubName = clubName; this.clubType = clubType; this.level = 1; if (Arrays.asList(starterArray).contains(clubName)) { this.rarity = "STARTER"; } else if (Arrays.asList(commonArray).contains(clubName)) { this.rarity = "COMMON"; } else if (Arrays.asList(rareArray).contains(clubName)) { this.rarity = "RARE"; } else if (Arrays.asList(epicArray).contains(clubName)) { this.rarity = "EPIC"; } // 初始化乘数 setMultipliers(); } // 新增:根据当前球杆名称和等级设置乘数 private void setMultipliers() { MultiplierPair[] levelMultipliers = ClubMultiplierConfig.getMultiplierConfig().get(this.clubName); // 等级校验避免越界 if (levelMultipliers != null && this.level >= 1 && this.level <=10) { MultiplierPair current = levelMultipliers[this.level]; this.maxMultiplier = current.getMax(); this.minMultiplier = current.getMin(); } } // 新增:升级球杆等级时自动更新乘数 public void setLevel(int level) { if (level >=1 && level <=10) { this.level = level; setMultipliers(); } }
方案优势
- 调取效率极高:O(1)时间复杂度就能拿到对应球杆对应等级的乘数,不需要switch分支也不需要遍历
- 结构清晰:完全是类表格的结构,行对应球杆名称,列对应1-10级,单元格存储最大最小乘数,便于维护
- 适配后续规划:
- 序列化:整个配置HashMap可直接序列化存储到本地文件,不需要额外改造
- 数据库迁移:后续要存SQL的话,只需要建一张
club_multiplier表,字段为club_name、level、max_multiplier、min_multiplier,程序启动时从表中读取数据填充到配置Map即可,上层业务逻辑不需要任何修改
- 学习成本低:全部使用Java基础/中级知识点,没有引入复杂框架或高阶语法
可选优化(非必须)
可以把球杆类型、稀有度都改成枚举类型,代替字符串存储,避免拼写错误导致的匹配失败,安全性更高。
内容的提问来源于stack exchange,提问作者gonzoa19
相关产品推荐
相关产品推荐

