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

洗牌方法报错‘检测到不可达代码’问题排查与解决

问题修复:实现100次随机交换的数组洗牌

问题根源分析

你的代码存在两个核心问题导致循环失效:

  1. 循环内提前返回:return array;写在for循环内部,第一次循环执行完交换就直接返回方法,后续迭代根本不会执行,这也是IDE提示“i++不可达代码”的原因。
  2. Random实例重复创建:每次循环都新建Random对象,由于默认种子依赖系统时钟,循环执行速度极快时,多个Random实例会使用相同种子,生成重复的随机数序列,交换效果会大打折扣甚至无效。

修正后的代码

int[] Shuffle(int[] array)
{
    Random r = new Random();
    for (int i = 0; i < 100; i++)
    {
        int x = r.Next(array.Length);
        int y = r.Next(array.Length);
        (array[x], array[y]) = (array[y], array[x]);
    }
    return array;
}

关键修正点

  • 将Random实例的创建移到for循环外部,确保整个洗牌过程使用同一个随机数生成器,避免重复种子问题。
  • 移除循环内部的return array;,仅在100次交换全部完成后返回数组,保证循环能完整执行100次迭代。

额外说明

如果需要更高效、符合统计学公平性的洗牌方式,推荐使用Fisher-Yates洗牌算法,它只需要遍历数组一次即可完成公平洗牌,比固定100次交换的效率更高。不过如果你的需求明确是执行100次随机交换,上面的修正代码完全满足要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:35:26