在此for循环中,括号的确切作用是什么?

时间:2020-04-05 18:49:54

标签: c#

我有一个关于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]);
            }   

1 个答案:

答案 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(...)代码。

在第三个示例中,括号没有连接到循环,因此您要创建一个没有任何控制结构的块。它在功能上与您的第二个示例相同。在许多情况下,以这种方式创建块可能会很有用,但是在您的情况下,它什么也不做。