首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过更改索引更改数组值顺序

通过更改索引更改数组值顺序
EN

Stack Overflow用户
提问于 2016-06-16 05:06:59
回答 1查看 2.3K关注 0票数 0

我试图通过更改索引来随机更改数组的元素。

到目前为止,我的代码如下:

代码语言:javascript
复制
    public static string[] Shuffle(string[] wordArray)
    {
        int swapIndex = 0;
        string temp;
        Random random = new Random();
        for (int i = 0; i < wordArray.Length; i++)
        {
            System.Console.WriteLine("random " + random.Next(0, wordArray.Length));
            swapIndex = (int)(random.Next(0, wordArray.Length));

            temp = wordArray[i];
            wordArray[i] = wordArray[swapIndex];
            wordArray[swapIndex] = temp;
        }
        return wordArray;
    }

调用该方法的函数如下:

代码语言:javascript
复制
    static string[] words1 = new string[] { "1", "2", "3" };
    static string[] days = new string[] { "M", "T", "W", "Th", "F", "S", "Su" };

    public static void playListCreation()
    {
        for (int j = 0; j < days.Length; j++)
        {
            var result = Shuffle(words1);
            foreach (var i in result)
            {
                System.Console.WriteLine(i + " ");
            }
            System.Console.WriteLine("/n");
        }
    }

代码的问题是,每次我在swapIndex值中得到相同的数字。我总是得到:

随机2 随机2 随机0

在所有迭代中。我不知道我做错了什么。

有什么想法吗?提前谢谢。

加法

现在解决办法是好的。但并不完美。由于我有随机值,我可以得到两个相同的结果。

例如: 星期一: 歌1 歌2 歌3 星期二: 歌2 歌1 歌3 星期三: 歌1 歌2 歌3

等等..。

和名单

星期一

星期三

在这种情况下是一样的。我需要控制它,但是正如您在代码中所看到的,一旦我从一天中得到列表,我就会打印出来。我想把它放在一个数组或元组上,并检查这个元组是否存在,但我认为太复杂了。我怎样才能解决这个问题?谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-16 05:12:32

您只需要声明和初始化Random一次。在Shuffle方法中声明它并在循环中调用它。这意味着您的Random对象每次都使用相同的种子进行初始化,因此很明显,它将生成相同的“随机”数字序列。

代码语言:javascript
复制
private static Random random = new Random();

    public static string[] Shuffle(string[] wordArray)
    {
        int swapIndex = 0;
        string temp;

        for (int i = 0; i < wordArray.Length; i++)
        {
            System.Console.WriteLine("random " + random.Next(0, wordArray.Length));
            swapIndex = (int)(random.Next(0, wordArray.Length));

            temp = wordArray[i];
            wordArray[i] = wordArray[swapIndex];
            wordArray[swapIndex] = temp;
        }
        return wordArray;
    }

另外,stop-cran有一个有效的点-- Console.WriteLine得到一个不同的随机数,而不是swapIndex变量。

如果要打印出swapIndex变量的值,请如下所示:

代码语言:javascript
复制
swapIndex = (int)(random.Next(0, wordArray.Length));
System.Console.WriteLine("random {0}", swapIndex); 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37850287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档