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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:04