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

如何使用Random类填充二维数组?代码生成重复值问题求助

问题分析与解决方案

咱们先拆解你遇到的两个问题:所有元素都是15,以及你担心的未遍历每个元素填充(其实你的代码已经在遍历,只是可能逻辑可读性或随机数生成的小问题导致结果不符合预期)

1. 为什么所有元素都是15?

你把Random声明为static是非常正确的做法——避免重复初始化导致生成完全相同的随机序列。但如果每次运行都得到全15的结果,大概率是这两个原因:

  • 你可能在短时间内多次重启程序,Random默认用系统时钟做种子,快速重启会导致种子重复,生成了相同的初始值;
  • 或者你测试时的巧合(虽然概率极低,但也有可能第一次生成的序列开头全是15)。

解决这个问题的小技巧:给Random指定一个绝对随机的种子,比如用Guid的哈希值,确保每次启动程序的种子都不一样:

static Random random = new Random(Guid.NewGuid().GetHashCode());

2. 确保遍历数组每个元素填充

你的代码其实已经在遍历二维数组的每个元素了,但咱们可以优化循环顺序,让逻辑更符合常规思维:
二维数组中arr.GetLength(0)代表行数,arr.GetLength(1)代表列数,通常我们会先遍历行,再遍历列,这样和数组索引arr[r,c](行在前、列在后)的逻辑完全对应,可读性更强:

public static void FillArray(int[,] arr)
{
    // 遍历每一行
    for (int r = 0; r < arr.GetLength(0); r++)
    {
        // 遍历当前行的每一列
        for (int c = 0; c < arr.GetLength(1); c++)
        {
            arr[r, c] = random.Next(15, 96);
        }
    }
}

这样的写法能明确看到每个元素都被随机值覆盖,不会有遗漏。

完整可运行代码

把修正后的代码整合,再补上PrintArray方法的实现,方便你直接测试:

using System;

class Program
{
    static Random random = new Random(Guid.NewGuid().GetHashCode());
    
    static void Main(string[] args)
    {
        int[,] array = new int[3, 5];
        FillArray(array);
        PrintArray(array);
    }

    public static void FillArray(int[,] arr)
    {
        for (int r = 0; r < arr.GetLength(0); r++)
        {
            for (int c = 0; c < arr.GetLength(1); c++)
            {
                arr[r, c] = random.Next(15, 96);
            }
        }
    }

    public static void PrintArray(int[,] arr)
    {
        for (int r = 0; r < arr.GetLength(0); r++)
        {
            for (int c = 0; c < arr.GetLength(1); c++)
            {
                Console.Write($"{arr[r, c],3}");
            }
            Console.WriteLine();
        }
    }
}

运行这段代码,你会看到3行5列的数组,每个元素都是15到95之间的随机数,不会再出现全15的情况啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:49:14