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

求助:根据充电次数与概率生成Java随机布尔值的算法

解决方案:按充电次数生成对应概率的错误结果

首先,我们先明确你的需求:第n次充电(n从1到10),返回false(错误)的概率是(11 - n) * 10%,返回true(成功)的概率是n * 10%。你的现有代码存在几个问题:比如ThreadLocalRandom.nextInt(origin, bound)是左闭右开区间,当origin等于bound时会直接抛出异常;而且用nextBoolean()是固定50%概率,完全不符合你需要的动态概率规则。

下面是更简洁且正确的实现方式,不需要冗长的switch语句:

import java.util.concurrent.ThreadLocalRandom;

public class ChargeErrorSimulator {
    public static boolean simulateChargeError(int chargeCount) {
        // 确保充电次数在1-10范围内,避免非法输入
        if (chargeCount < 1 || chargeCount > 10) {
            throw new IllegalArgumentException("Charge count must be between 1 and 10");
        }
        
        // 计算错误概率对应的阈值:第1次是100%=100,第2次是90%=90,...第10次是10%=10
        int errorThreshold = (11 - chargeCount) * 10;
        
        // 生成0到99之间的随机整数(包含0,不包含100)
        int randomValue = ThreadLocalRandom.current().nextInt(0, 100);
        
        // 随机数小于阈值则返回false(错误),否则返回true(成功)
        return randomValue >= errorThreshold;
    }
}

代码逻辑解释:

  • 输入校验:先判断充电次数是否在合法范围内,避免非法参数导致逻辑混乱。
  • 阈值计算:利用规律(11 - chargeCount) * 10直接得到错误概率对应的百分比数值,比如第3次充电时,错误概率是80%,阈值就是80。
  • 随机数判断:生成0-99的随机数,当随机数小于阈值时触发错误(返回false),否则返回true。这个逻辑刚好匹配你需要的概率:比如阈值80时,0-79这80个数值对应错误,占80%概率,剩下20%返回true。

极简版(若能保证输入合法):

如果你确定调用时chargeCount一定在1-10之间,可以简化成一行代码:

return ThreadLocalRandom.current().nextInt(0, 100) >= (11 - chargeCount) * 10;

这样就能完美模拟你需要的真实充电错误概率场景啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:11:13