C# 为什么每次按下按钮时我的阵列都会来回变化?
C#Windows窗体应用程序-Visual Studio 这是我的代码,它创建一个数组,并在文本框中一步一步地按数值对其排序。唯一的问题是,当我多次单击按钮时,它会在实际数组和另一个随机数组之间切换。为什么会这样C# 为什么每次按下按钮时我的阵列都会来回变化?,c#,arrays,winforms,visual-studio,bubble-sort,C#,Arrays,Winforms,Visual Studio,Bubble Sort,C#Windows窗体应用程序-Visual Studio 这是我的代码,它创建一个数组,并在文本框中一步一步地按数值对其排序。唯一的问题是,当我多次单击按钮时,它会在实际数组和另一个随机数组之间切换。为什么会这样 int[] randArray = new int[5]; private void txtSeed_TextChanged(object sender, EventArgs e) { int notaninteger; if (!in
int[] randArray = new int[5];
private void txtSeed_TextChanged(object sender, EventArgs e) {
int notaninteger;
if (!int.TryParse(txtSeed.Text, out notaninteger)) {
txtSeed.Text = "0";
}
if (int.Parse(txtSeed.Text) < 0) {
txtSeed.Text = "0";
}
}
private void btnLotto_Click(object sender, EventArgs e) {
fillArray();
sortArray();
showResult();
}
private void fillArray() {
bool inArray = true;
Random random = new Random(int.Parse(txtSeed.Text));
for (int i = 0; i < randArray.Length; i++) {
do {
int randomNumber = random.Next(1, 51);
inArray = checkArray(randomNumber);
if (!inArray) {
randArray[i] = randomNumber;
}
}
while (inArray);
}
}
private void displayArray() {
txtLotto.AppendText(getFormat());
txtLotto.AppendText("\r\n");
}
private void sortArray() {
txtLotto.Text = "";
for (int i = 0; i < randArray.Length; i++) {
for (int j = 0; j < randArray.Length - 1; j++) {
if (randArray[j] > randArray[j + 1]) {
swap(ref randArray[j], ref randArray[j + 1]);
displayArray();
}
}
}
}
private bool checkArray(int a) {
for (int i = 0; i < randArray.Length; i ++) {
if (randArray[i] == a) {
return true;
}
}
return false;
}
private string getFormat() {
string format = "";
for (int i = 0; i < randArray.Length; i ++) {
if (i != 0) {
format += "-";
}
format += randArray[i];
}
return format;
}
private void showResult() {
lblFinalResult.Text = "Final Result: ";
string format = "";
for (int i = 0; i < randArray.Length; i++) {
if (i != 0) {
format += "-";
}
format += randArray[i];
}
lblFinalResult.Text += format;
}
private void swap(ref int a, ref int b) {
int tempA = a;
a = b;
b = tempA;
}
int[]randArray=newint[5];
私有void txtsteed_TextChanged(对象发送方,事件参数e){
int notaninteger;
如果(!int.TryParse(txtSeed.Text,out notaninteger)){
txtSeed.Text=“0”;
}
if(int.Parse(txtSeed.Text)<0){
txtSeed.Text=“0”;
}
}
私有void btnLotto_单击(对象发送者,事件参数e){
fillArray();
sortArray();
showResult();
}
私有void fillArray(){
bool-inArray=true;
Random Random=新的Random(int.Parse(txtSeed.Text));
for(int i=0;i随机数组[j+1]){
交换(参考随机阵列[j],参考随机阵列[j+1]);
displayArray();
}
}
}
}
私有布尔校验数组(int a){
for(int i=0;i
如果将同一种子用于单独的随机对象,则它们将
生成相同的随机数序列
您有两种不同类型的阵列的原因是:
private Random random = new Random(); // one instance of random
private int previousSeed = 0; // memorize previous seed
private void fillArray()
{
bool inArray = true;
int newSeed = int.Parse(txtSeed.Text);
if (newSeed != previousSeed)
{
// reinitialize the random only if new seed is different
random = new Random(newSeed);
previousSeed = newSeed;
}
如果将同一种子用于单独的随机对象,则它们将
生成相同的随机数序列
您有两种不同类型的阵列的原因是:
private Random random = new Random(); // one instance of random
private int previousSeed = 0; // memorize previous seed
private void fillArray()
{
bool inArray = true;
int newSeed = int.Parse(txtSeed.Text);
if (newSeed != previousSeed)
{
// reinitialize the random only if new seed is different
random = new Random(newSeed);
previousSeed = newSeed;
}
整个应用程序只需要一个随机实例,而不是每个填充操作。此外,随机并不意味着唯一-大多数乐透会使用50个介于1和50之间的唯一数字(包括)。你说的一个随机实例是什么意思?@TylerArnett Not Random。随机的如中所述,
Random
@puropoix的一个实例,您的建议似乎与code-OP尝试写入seed来自文本框的位置(因此序列保持不变,直到seed手动更新)……请注意,如果您需要生成特定范围内的随机数字列表的实际代码(也称为“唯一随机数”)-只需使用.take()
…您只需要为整个应用程序随机创建一个实例,而不是为每个填充操作。此外,随机并不意味着唯一-大多数乐透会使用50个介于1和50之间的唯一数字(包括)。你说的一个随机实例是什么意思?@TylerArnett Not Random。随机的如中所述,Random
@puropoix的一个实例,您的建议似乎与code-OP尝试写入seed来自文本框的位置(因此序列保持不变,直到seed手动更新)……请注意,如果您需要生成特定范围内的随机数字列表的实际代码(也称为“唯一随机数”)-只需使用并可能使用