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

Unity中使用UnityEngine.Random生成不重复随机数出现无限循环问题

随机生成9个不重复数字时无限循环的原因分析

你的代码陷入无限循环的核心问题出在Unity随机数方法的区间特性上:

  • Unity的Random.Range(int min, int max)是左闭右开区间,你写的Random.Range(1,9)只会生成1到8的整数(包含1,不包含9)。但你需要生成1-9共9个不重复数字,当数组填满1-8后,后续永远生成不了9,代码会一直进入else分支执行j--,内层for循环无法正常推进,最终卡死在无限循环里。

  • 你朋友的复刻代码能正常运行,是因为他用的是标准C#的Random.Next(int minValue, int maxValue)——这个方法是左闭右闭区间,如果他写的是Next(1,10),就能覆盖1-9的所有数字,自然不会出现无限循环的情况。

补充优化建议

你的代码靠重复随机碰运气去重的逻辑效率偏低,当数组接近填满时,重复碰撞的概率会急剧上升。推荐改用洗牌算法,比如先把1-9存入列表,打乱顺序后再填充数组,示例逻辑如下:

public void randomizer()
{
    resetArray();
    List<int> nums = new List<int>{1,2,3,4,5,6,7,8,9};
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            int randomIdx = UnityEngine.Random.Range(0, nums.Count);
            buttons[i,j] = nums[randomIdx];
            nums.RemoveAt(randomIdx);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:25:20