我正在尝试通过更改索引来随机更改数组的元素。
到目前为止,我的代码如下:
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;
}
调用该方法的函数如下:
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
等等......
来自
的清单周一
和
在这种情况下,星期三
是相同的。我需要控制它,但正如你在代码中看到的那样,一旦我从一天获得列表,我就打印出来。我想把它放在数组或元组上并检查该元组是否存在,但我认为它太复杂了。我该如何解决这种情况?谢谢!
答案 0 :(得分:3)
您只需要声明并初始化Random
一次。您在Shuffle
方法中声明它并在循环中调用它。这意味着您的Random
对象每次都使用相同的种子进行初始化,因此很明显它会生成相同的“随机”数字序列。
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
变量的值,请按以下方式执行:
swapIndex = (int)(random.Next(0, wordArray.Length));
System.Console.WriteLine("random {0}", swapIndex);