我有一个关于for循环的问题:此代码应将6个随机数添加到3个不同的框中。该代码将每个框(* 1)放入21个数字。我可以通过从第二个for循环(* 2)中删除括号或编写a [i,k] = r.Next(20,31)来解决此问题。在大括号(* 3)的前面。但为什么?
1
int[,] a;
a = new int[7, 3];
listeBox.Items.Clear();
listBox1.Items.Clear();
listBox2.Items.Clear();
for (int i = 0; i <= a.GetUpperBound(0); i++) //false
{
for (int k = 0; k <= a.GetUpperBound(1); k++)
{
a[i, k] = r.Next(20, 31);
listeBox.Items.Add(a[i, 0]);
listBox1.Items.Add(a[i, 1]);
listBox2.Items.Add(a[i, 2]);
}
}
2
for (int k = 0; k <= a.GetUpperBound(1); k++) //correct
a[i, k] = r.Next(20, 31);
listeBox.Items.Add(a[i, 0]);
listBox1.Items.Add(a[i, 1]);
listBox2.Items.Add(a[i, 2]);
3
for (int k = 0; k <= a.GetUpperBound(1); k++) //correct
a[i, k] = r.Next(20, 31);
{
listeBox.Items.Add(a[i, 0]);
listBox1.Items.Add(a[i, 1]);
listBox2.Items.Add(a[i, 2]);
}
答案 0 :(得分:0)
之所以可行,是因为除了行a[i,k] = r.Next(20,31)
之外,块中的其他行均不使用k
做任何事情。在第一个示例中,
for (int k = 0; k <= a.GetUpperBound(1); k++)
{
a[i, k] = r.Next(20, 31);
listeBox.Items.Add(a[i, 0]);
listBox1.Items.Add(a[i, 1]);
listBox2.Items.Add(a[i, 2]);
}
listBox...
行每次通过k
循环都执行完全相同的操作,因此您不必一遍又一遍地执行相同的操作。
在第二个示例中,缺少花括号表示循环仅执行该行
a[i, k] = r.Next(20, 31);
这跟说的一样
for (int k = 0; k <= a.GetUpperBound(1); k++) //correct
a[i, k] = r.Next(20, 31);
listeBox.Items.Add(a[i, 0]);
listBox1.Items.Add(a[i, 1]);
listBox2.Items.Add(a[i, 2]);
k
循环完成后,将继续进行listBox.Items.Add(...)
代码。
在第三个示例中,括号没有连接到循环,因此您要创建一个没有任何控制结构的块。它在功能上与您的第二个示例相同。在许多情况下,以这种方式创建块可能会很有用,但是在您的情况下,它什么也不做。