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

骰子游戏中Three of a kind判定与得分计算方法开发问题求助

解决骰子Three of a Kind的得分计算问题

嘿,看你描述的需求,应该是在做骰子游戏里的三条得分模块对吧?用ArrayList遍历的思路方向是对的,但估计是在统计点数出现次数的时候踩了坑——我之前做类似功能的时候也犯过类似的错,给你捋捋正确的实现逻辑,再给你完整的代码参考。

核心实现思路

要搞定这个需求,关键是准确统计每个骰子点数的出现次数,然后判断是否存在至少出现3次的点数:

  • 第一步:用一个映射表(比如Map)来记录每个点数出现的次数,键是骰子点数,值是对应出现的次数
  • 第二步:遍历这个映射表,找到出现次数≥3的点数(毕竟5个骰子最多出现5次,但只要满足3次就触发得分)
  • 第三步:如果找到符合条件的点数,就把该点数×10加到总分里;没找到就加0分

完整代码示例(Java)

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class DiceScoreCalculator {
    // 计算Three of a Kind的得分
    public int calculateThreeOfAKindScore(ArrayList<Integer> diceRolls) {
        // 统计每个点数的出现次数
        Map<Integer, Integer> countMap = new HashMap<>();
        for (int dice : diceRolls) {
            countMap.put(dice, countMap.getOrDefault(dice, 0) + 1);
        }

        int threeOfAKindScore = 0;
        // 遍历统计结果,寻找符合条件的点数
        for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
            if (entry.getValue() >= 3) {
                threeOfAKindScore = entry.getKey() * 10;
                // 注意:如果是Full House(3+2的组合),这里只计算一次三条的得分
                break;
            }
        }
        return threeOfAKindScore;
    }

    // 测试几个典型场景
    public static void main(String[] args) {
        DiceScoreCalculator calculator = new DiceScoreCalculator();
        
        // 测试场景1:标准三条(5,5,5,1,2)→ 预期得分50
        ArrayList<Integer> testCase1 = new ArrayList<>();
        testCase1.add(5);
        testCase1.add(5);
        testCase1.add(5);
        testCase1.add(1);
        testCase1.add(2);
        System.out.println(testCase1 + " 得分:" + calculator.calculateThreeOfAKindScore(testCase1));
        
        // 测试场景2:无三条→ 预期得分0
        ArrayList<Integer> testCase2 = new ArrayList<>();
        testCase2.add(1);
        testCase2.add(2);
        testCase2.add(3);
        testCase2.add(4);
        testCase2.add(5);
        System.out.println(testCase2 + " 得分:" + calculator.calculateThreeOfAKindScore(testCase2));
        
        // 测试场景3:四条(3,3,3,3,6)→ 依然满足三条规则,预期得分30
        ArrayList<Integer> testCase3 = new ArrayList<>();
        testCase3.add(3);
        testCase3.add(3);
        testCase3.add(3);
        testCase3.add(3);
        testCase3.add(6);
        System.out.println(testCase3 + " 得分:" + calculator.calculateThreeOfAKindScore(testCase3));
    }
}

常见问题排查

如果你的旧代码运行不符合预期,大概率是这几个原因:

  1. 重复统计点数:比如遍历ArrayList时,每遇到一个点数就从头数一遍该点数的总次数,导致重复计算或者统计错误
  2. 未正确处理次数≥3的情况:比如只判断了等于3,没考虑到4次、5次的情况(毕竟四条、五条也满足三条的得分规则)
  3. 逻辑混乱:比如遍历过程中没有正确记录符合条件的点数,最后拿错了数值计算得分

你可以对照上面的代码,看看自己的实现哪里出了问题,应该就能搞定啦!

内容的提问来源于stack exchange,提问作者S. Vono

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:18:07