我试图通过更改索引来随机更改数组的元素。
到目前为止,我的代码如下:
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
等等..。
和名单
星期一
和
星期三
在这种情况下是一样的。我需要控制它,但是正如您在代码中所看到的,一旦我从一天中得到列表,我就会打印出来。我想把它放在一个数组或元组上,并检查这个元组是否存在,但我认为太复杂了。我怎样才能解决这个问题?谢谢!!
发布于 2016-06-16 05:12:32
您只需要声明和初始化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); https://stackoverflow.com/questions/37850287
复制相似问题