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

Java数组配对计数问题:如何按每2个相同元素为1对统计数量

问题根因

现有双重循环逻辑的本质是统计所有两两相等元素的组合数,对应公式为C(n,2) = n*(n-1)/2,和需求中「每2个相同元素计为1对」的规则完全不匹配:比如4个相同元素会得到6次匹配,3个相同元素会得到3次匹配,和你观测到的计数偏差完全符合。

优化实现

推荐先统计每个面值的出现次数,再按规则计算配对数,优化后代码如下:

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class BonusGame {
    public static void main(String[] args) {
        Random r = new Random();
        int[] bonusGame = new int[5];
        int bonusGameSum = 0;
        
        // 随机数组生成逻辑保持原有概率不变
        for (int newNum = 0; newNum < 5; newNum++) {
            int chanceGen = r.nextInt(100);
            if (chanceGen <= 50) {
                bonusGame[newNum] = 10;
            } else if (chanceGen <= 77) {
                bonusGame[newNum] = 20;
            } else if (chanceGen <= 92) {
                bonusGame[newNum] = 50;
            } else if (chanceGen <= 98) {
                bonusGame[newNum] = 200;
            } else {
                bonusGame[newNum] = 1000;
            }
        }
        
        // 打印生成的数值
        for (int z : bonusGame) {
            System.out.println(z);
        }
        
        // 统计每个面值的出现次数
        Map<Integer, Integer> valueCount = new HashMap<>();
        for (int num : bonusGame) {
            valueCount.put(num, valueCount.getOrDefault(num, 0) + 1);
        }
        
        // 按规则计算奖金
        for (Map.Entry<Integer, Integer> entry : valueCount.entrySet()) {
            int faceValue = entry.getKey();
            int count = entry.getValue();
            int pairs = count / 2; // 整数除法自动取整,完全匹配需求规则
            if (pairs > 0) {
                int winAmount = pairs * faceValue;
                System.out.printf(" 你赢得 %d 欧元 \n", winAmount);
                bonusGameSum += winAmount;
            }
        }
        
        System.out.println("本次总奖金:" + bonusGameSum);
    }
}

方案优势

  • 逻辑准确:count / 2的整数除法刚好匹配需求:3个相同得1对、4个相同得2对、6个相同得3对,不会出现多计数的问题
  • 可维护性高:后续新增面值只需要调整随机生成部分的概率分支即可,统计逻辑无需修改
  • 性能更优:仅需要两次单层遍历,时间复杂度从原有O(n²)降低为O(n),数组长度变大时优势更明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:15:05