【发布时间】:2019-06-04 19:47:04
【问题描述】:
我在同一类的多个对象中洗牌时遇到问题。
我在构造函数调用中使用函数void shuffle()。
打印我的 dataCharset 数组后,结果发现每个对象都有相同的洗牌数组。
我在控制台应用程序中使用 .net framework 4.8。
我尝试使用一个临时数组,然后将其复制到 dataCharset 数组中(这是我需要随机播放的目标数组)。
char[] dataCharset =
{
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'!', '$', '#', '@', '-'
};
void shuffle()
{
Random random = new Random();
for (int i = 0; i < dataLength; i++)
{
int index = random.Next(0, dataLength);
char temp = dataCharset[index];
dataCharset[index] = dataCharset[i];
dataCharset[i] = temp;
}
}
构造函数看起来像:
public Guesser()
{
dataLength = dataCharset.Length;
shuffle();
Console.WriteLine(dataCharset);
}
还有我创建对象的主文件
Guesser 是我的班级
Guesser guesser1 = new Guesser();
Guesser guesser2 = new Guesser();
Guesser guesser3 = new Guesser();
Guesser guesser4 = new Guesser();
如果我使用“new”关键字创建每个对象,为什么每个对象都有相同的数组? 我希望每个对象都有自己的洗牌数组。
【问题讨论】:
-
请提供完整的编译代码示例。展示整个课程,并展示您使用
new运算符创建多个实例的位置,以及您正在使用它们做什么。样本应该是最少的,不多也不少于证明问题所需要的;它应该证明问题, -
请用代码示例而不是 cmets 更新 问题
-
请在您的问题中添加一个完整的、可编译的代码示例。请编辑您的问题并将代码添加到您的问题中。该示例应该演示该问题,并且应该可以编译。它应该包括你正在创建的类的全部、完整、完整而不是部分的定义,它应该显示你是如何创建它的以及你正在用它做什么。它应该编译。不是粘贴箱。请将代码添加到您的问题中。
-
仅供参考,您的“char”数组中填充了整数
-
1.您应该实施 Fisher-Yates 洗牌,而您目前没有。 2.您对
new Random()的调用不在for循环中,所以我认为前面的答案不适用。 3.(基本上)你上面的代码确实会导致显示不同的列表,所以我怀疑你的代码中有一些东西你上面遗漏了。