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

Dart中如何生成排除当前state值的随机数?

实现方案

前置说明

你当前使用的是Dart语言的随机数生成逻辑,要实现排除当前state值的需求,可按需选择以下两种实现方式:

方案1:循环重试法(实现最简单,适合绝大多数场景)

只要生成的新值和旧值相等,就重新生成,直到拿到不同的值即可,代码复杂度极低:

// 先保存当前的旧state值
int oldState = state;
Random random = Random();
do {
  state = random.nextInt(range) + start;
} while (state == oldState);

注意:该方案要求你的range值至少为2,否则会进入死循环,建议加前置判断避免异常。

方案2:固定步数计算法(无循环,性能稳定)

如果你的range很小,或者需要保证生成逻辑的耗时固定,可以用偏移计算的方式,完全避免循环:
核心逻辑是把要排除的值从取值范围里去掉后,先生成「范围长度-1」的随机数,再通过判断是否大于等于被排除值来决定是否加1偏移,就能拿到符合要求的结果:

int oldState = state;
Random random = Random();
// 先把当前state转成相对于start的偏移量,方便计算
int excludeOffset = oldState - start;
// 生成 range-1 范围内的随机数
int randOffset = random.nextInt(range - 1);
// 如果生成的偏移量大于等于要排除的偏移量,就加1跳过排除值
if (randOffset >= excludeOffset) {
  randOffset += 1;
}
// 最终赋值新的state
state = randOffset + start;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:36:03