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

Java游戏开发:创建便捷智能的Amounts数量标识类方法指导

实现灵活的物品数量标识工具类Amounts

首先明确:Java语法不允许标识符以数字开头,所以Amounts.1M这种写法无法直接实现,下面提供两种符合语法且无需枚举所有数值的智能实现方案。

方案一:静态方法后缀式(简洁直观)

通过静态方法封装后缀对应的倍数,调用时直接传入数字+方法后缀,最接近你想要的简洁写法。

public class Amounts {
    // 千级(1k = 1000)
    public static long k(long num) {
        return num * 1000;
    }

    // 百万级(1M = 1000000)
    public static long m(long num) {
        return num * 1000000;
    }

    // 支持浮点数输入(比如0.5M = 500000)
    public static long m(double num) {
        return (long) (num * 1000000);
    }

    public static long k(double num) {
        return (long) (num * 1000);
    }

    // 可选:扩展十亿级等更大单位
    public static long b(long num) {
        return num * 1000000000;
    }
}

使用示例

new Item(ItemsList.COINS, Amounts.m(1));    // 对应100万金币
new Item(ItemsList.FISH, Amounts.k(2));     // 对应2000条鱼
new Item(ItemsList.GEMS, Amounts.m(0.5));   // 对应50万宝石

方案二:字符串解析式(灵活扩展)

如果想要直接使用类似"1M"、"2k"的字符串格式,可通过字符串解析实现,支持任意合法数字+后缀组合,无需提前定义所有可能的数值。

public class Amounts {
    // 后缀与倍数的映射,可按需扩展
    private static final Map<Character, Long> SUFFIX_MULTIPLIERS = Map.of(
        'k', 1000L,
        'm', 1000000L,
        'b', 1000000000L
    );

    public static long parse(String amountStr) {
        if (amountStr == null || amountStr.isBlank()) {
            throw new IllegalArgumentException("数量字符串不能为空");
        }

        char lastChar = amountStr.charAt(amountStr.length() - 1);
        // 判断最后一位是否为后缀字母
        if (Character.isLetter(lastChar)) {
            String numberPart = amountStr.substring(0, amountStr.length() - 1);
            double number = Double.parseDouble(numberPart);
            Long multiplier = SUFFIX_MULTIPLIERS.get(Character.toLowerCase(lastChar));
            
            if (multiplier == null) {
                throw new IllegalArgumentException("不支持的数量后缀:" + lastChar);
            }
            return (long) (number * multiplier);
        } else {
            // 无后缀,直接解析为长整数
            return Long.parseLong(amountStr);
        }
    }
}

使用示例

new Item(ItemsList.COINS, Amounts.parse("1M"));  // 100万金币
new Item(ItemsList.FISH, Amounts.parse("2k"));   // 2000条鱼
new Item(ItemsList.IRON, Amounts.parse("350"));  // 350个铁矿

注意:如果坚持要Amounts.1M的写法,Java语法无法支持,因为标识符不能以数字开头。枚举所有数值的方案不符合你“智能实现”的需求,因此不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:05:18