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

如何避免C#中Random生成问题索引时出现重复?

解决随机索引重复问题的方案

核心问题分析

你当前的代码有两个导致重复的问题:

  • 每次调用Hannes()都新建Random实例,短时间内多次调用会因为系统时钟种子重复,生成相同的随机序列
  • 没有记录已使用过的索引,完全靠随机碰运气,必然会出现重复

具体修改步骤

  1. 复用Random实例:把Random声明为类的成员变量,避免每次创建新实例导致的序列重复
  2. 记录已使用索引:用HashSet<int>存储已经选过的索引,快速判断新生成的索引是否重复
  3. 修正随机数范围:原代码Next(1,32)只会生成1-31的索引,漏掉了0和32,应该用Next(0,33)覆盖0-32的全部范围

修改后的代码示例

首先在类中添加成员变量:

// 作为类的成员变量,只初始化一次
private Random _slump = new Random();
// 存储已使用过的索引,避免重复
private HashSet<int> _usedIndices = new HashSet<int>();

然后修改Hannes()方法:

public void Hannes()
{
    // 当所有33个索引都用过之后,清空集合重新开始
    if (_usedIndices.Count == 33)
    {
        _usedIndices.Clear();
    }

    int newIndex;
    // 循环生成随机数,直到找到未使用过的索引
    do
    {
        // 生成0到32之间的随机整数(左闭右开,所以上限是33)
        newIndex = _slump.Next(0, 33);
    } while (_usedIndices.Contains(newIndex));

    kuken = newIndex;
    // 将新索引加入已使用集合
    _usedIndices.Add(newIndex);
}

补充说明

  • HashSet<int>的Contains方法查询效率很高,不会因为索引数量多导致性能问题
  • 如果需要在所有索引用完后停止而不是重置,可以在_usedIndices.Count == 33时添加相应的逻辑(比如提示用户所有问题已展示)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:15:47