【发布时间】:2017-03-08 05:19:48
【问题描述】:
C# Windows 窗体应用程序 - Visual Studio
这是我的代码,它在文本框中一步一步地创建一个数组并按数值对其进行排序。唯一的问题是,当我多次单击该按钮时,它会在实际数组和似乎是另一个随机数组之间切换。这是为什么呢?
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;
}
【问题讨论】:
-
整个应用只需要一个 Random 实例,而不是每次填充操作。此外,随机并不意味着唯一 - 大多数乐透会使用 1 到 50(包括)之间的 50 个唯一数字
-
一个随机实例是什么意思?
-
@TylerArnett 不是随机的。随机的。例如,
Random的一个实例。 -
@Plutonix 你的建议似乎是反对代码 OP 试图写出种子来自文本框的位置(因此序列在手动更新种子之前保持不变)......
-
请注意,如果您需要在特定范围内生成随机数字列表的实际代码(也称为“唯一随机数”) - 只需使用 stackoverflow.com/questions/273313/randomize-a-listt 随机播放 1..n 的序列,并可能采取
.Take()需要的元素...
标签: c# arrays winforms visual-studio bubble-sort