【问题标题】:How do I set parts of an array to a random value in C#?如何在 C# 中将数组的一部分设置为随机值?
【发布时间】:2012-10-20 06:28:56
【问题描述】:

我是编程新手,请多多包涵!

我正在尝试将数组的各个部分设置为随机值,但每当我运行程序时,它会将数组的所有部分设置为相同的值。我希望他们都与众不同。

这是我的代码:

int[] hello_array = new int[10];
        Console.WriteLine("Here");

        Random rndm = new Random();

        for (int j = 0; j < hello_array.Length; j++)
        {
            hello_array[j] = rndm.Next(99);
        }

        Console.WriteLine("Now Here");

        for (int i = 0; i < hello_array.Length; i++)
        {
            Console.WriteLine("hahahaha look at this " + hello_array[0]);

我可能完全错过了它,但我不知道我的代码有什么问题!有人可以告诉我如何使数组的所有十个部分生成不同的随机数吗?

【问题讨论】:

    标签: c# arrays random numbers


    【解决方案1】:

    改变这个:

     Console.WriteLine("hahahaha look at this " + hello_array[0]);
    

    到这里:

     Console.WriteLine("hahahaha look at this " + hello_array[i]);
    

    您在每次循环时都在数组中打印相同的元素。

    【讨论】:

    • 啊,是的,我现在明白了。谢谢。
    • @LewisAnderson 请不要忘记用绿色复选标记标记您认为最有帮助的答案。
    【解决方案2】:

    在行数相同的情况下,您可以使用一些较新的 C# 功能来完成相同的结果(但没有所有杂乱的细节)。

    您将定义一个generic method,它接受两个参数:lambda expression(例如,() =&gt; random.Next(99))和要生成的元素数。在方法内部,您将使用 yield 关键字返回工厂生成的新元素。

    Random random = new Random();
    foreach (var element in Generate(() => random.Next(99), 10))
    {
        Console.WriteLine(element);
    }
    

    public static IEnumerable<T> Generate<T>(Func<T> factory, int elements)
    {
        for (int generated = 0; generated < elements; generated++)
        {
            yield return factory();
        }
    }
    

    【讨论】:

    • 我认为对于这样一个简单的例子来说有点矫枉过正。如果你要重写它,为什么不直接使用:for (int i = 0; i &lt; 10; i++) { Console.WriteLine("hahahaha look at this " + rndm.Next(99)); }:P
    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2019-06-09
    • 1970-01-01
    相关资源
    最近更新 更多