骰子游戏中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)); } }
常见问题排查
如果你的旧代码运行不符合预期,大概率是这几个原因:
- 重复统计点数:比如遍历ArrayList时,每遇到一个点数就从头数一遍该点数的总次数,导致重复计算或者统计错误
- 未正确处理次数≥3的情况:比如只判断了等于3,没考虑到4次、5次的情况(毕竟四条、五条也满足三条的得分规则)
- 逻辑混乱:比如遍历过程中没有正确记录符合条件的点数,最后拿错了数值计算得分
你可以对照上面的代码,看看自己的实现哪里出了问题,应该就能搞定啦!
内容的提问来源于stack exchange,提问作者S. Vono
相关产品推荐
相关产品推荐

