我是C#和编程的初学者。 因此,我现在正在学校中处理此代码,在这里我必须生成1-21之间的21个随机数(您可以复制数字)。 我已经编写了代码,并且可以正常工作...它在listbox1中生成数字,但与在listbox3中排序的数字不同。
private void button1_Click(object sender, EventArgs e)
{
int[] a = new int[21];
Random tal = new Random();
for (int x = 1; x < a.Length; x++)
{
a[x] = tal.Next(1, 21);
}
for (int x = 1; x < a.Length; x++)
{
listBox1.Items.Add(a[x]);
}
foreach (int i in a)
{
Array.Sort(a);
listBox3.Items.Add(a[i]);
}
int min = a[1];
for (int x = 1; x < a.Length; x++)
if (a[x] < min)
min = a[x];
listBox2.Items.Add(min);
int max = a[20];
for (int x = 1; x > a.Length; x++)
if (a[x] < max)
max = a[x];
listBox2.Items.Add(max);
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button3_Click(object sender, EventArgs e)
{
int[] a = new int[21];
Random tal = new Random();
a.Clone();
foreach (int i in a)
{
Array.Sort(a);
listBox3.Items.Add(a[i]);
}
}
}
}
答案 0 :(得分:1)
1.Array以索引0开头,因此将所有循环更改为从0开始:
for (int x = 0; x < a.Length; x++)
代替
for (int x = 1; x < a.Length; x++)
还有int min = a[0];
不是int min = a[1];
2。将数组在for循环外排序,无需一遍又一遍地进行:
Array.Sort(a);
foreach (int i in a)
{
listBox3.Items.Add(a[i]);
}
项目必须相同(但顺序不同)。
而且您正在克隆(a.Clone();
)却实际上没有将其分配给任何东西,因此它是一个额外的代码。
答案 1 :(得分:0)
变量具有作用域。
这对您当前意味着,a
中的button1_Click
与a
中的button3_Click
不同(更不用说将它们分配给不同的数组)。
如果需要共享它们,则a
应该在类级别上声明(即,不在方法中)。然后这两种方法都可以使用相同的变量(只是不要重新分配它!)。
也:
a.Clone();
不会执行任何操作,除非您分配结果Sort
完全是过分的Random tal = new Random()
甚至不在button3_click
中使用