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

生成小于首个随机数的第二个随机数遇问题:代码报错或返回空值

解决生成小于第一个随机数的第二个随机数时的报错问题

原问题代码

Random randN = new Random();

int firstNumbereasy; //declaring variables  for easy mode
int secondNumbereasy;

firstNumbereasy = randN.nextInt(11); // 
secondNumbereasy= randN.nextInt(firstNumbereasy-1); 

报错原因

当firstNumbereasy生成0或1时,firstNumbereasy-1会变成-1或0,而Random.nextInt(int bound)要求传入的bound必须大于0,此时会直接抛出IllegalArgumentException,导致代码报错;如果异常未被正确捕获处理,还可能出现返回空值之类的异常情况。

修复方案

方案1:限制第一个随机数的范围(推荐)

如果业务场景允许第一个数从2开始(确保存在更小的非负整数),可以直接调整第一个数的生成逻辑,避免边界问题:

Random randN = new Random();

int firstNumbereasy = randN.nextInt(10) + 2; // 生成2~10的随机数(包含2,不包含12)
int secondNumbereasy = randN.nextInt(firstNumbereasy); // 生成0~firstNumbereasy-1的随机数,必然小于第一个数

这里randN.nextInt(firstNumbereasy)会生成[0, firstNumbereasy-1]区间的整数,完全满足"小于第一个随机数"的要求,同时避免了参数非法的问题。

方案2:兼容所有初始范围的边界处理

如果必须保留第一个数0~10的范围,需要针对边界情况做特殊处理:

Random randN = new Random();

int firstNumbereasy = randN.nextInt(11);
int secondNumbereasy;

if (firstNumbereasy == 0) {
    // 无小于0的非负整数,根据业务需求处理,比如抛出异常或设置默认值
    throw new IllegalArgumentException("无法生成小于0的非负整数");
} else if (firstNumbereasy == 1) {
    secondNumbereasy = 0; // 唯一小于1的非负整数
} else {
    secondNumbereasy = randN.nextInt(firstNumbereasy);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:01:00