很难理解for循环和嵌套for循环

时间:2015-01-06 20:56:01

标签: for-loop nested-loops

所以,我理解编程非常好,但是最近我遇到了for循环,特别是嵌套的循环......我根本无法理解。它根本不会进入我的脑海。任何人都可以给我一些关于如何更好地感知这些循环的提示(或者......根本)吗?

提前致谢

3 个答案:

答案 0 :(得分:3)

程序描述了计算机要执行的一系列操作。在这些操作中,可能是计算机应重复多次的一些子序列。在程序源代码(在许多情况下是不可能的)中,不是在字面上重复这些子序列的适当次数,而是可以使用一种构造,告诉计算机在这样的子序列结束时它应该返回或“循环”回来到那个子序列的开头。这些类型的构造通常称为“循环”。

在某些情况下,操作的重复子序列本身包含操作的子序列,这些操作应该作为执行包含序列的一次迭代的一部分重复多次。这也可以通过循环结构来表示。


示例:清洁家中窗户的算法

  1. 从衣柜中取出清洁用品
  2. 如果没有脏窗户则停止。否则,
  3. 转到下一个脏窗口。
    1. 喷雾清洁剂
    2. 擦除窗口
    3. 如果不够干净,请返回步骤3.1
  4. 返回第2步。
  5. 它有两个循环:一个包含除第一个以外的每个步骤的外部循环,另一个包含步骤3.1到3.3的内部循环。


    通常,在启动循环之前必须达到某种初始化或启动状态。在这个例子中,在我真正清理任何窗户之前,我必须拿到我的清洁用品,我想从第一个窗口开始。

    在大多数有趣的情况下,您事先并不知道程序需要在给定循环中运行多少次。例如,在示例中,我可能能够将外循环的迭代次数预测为我家中的窗口数,但我无法确定任何给定窗口将需要多少次内循环迭代。循环结构通过为循环终止提供灵活的条件来处理这个问题。

    另一方面,某事必须从迭代变为迭代,否则重复永远不会停止。在最简单的情况下,触发从循环中最终中断的更改是(抽象地)已经执行的循环迭代的数量。但是,我们常常想要更灵活地衡量是否需要更多的迭代,例如“窗户是否足够干净?”

    C / Java风格的for循环形式化了这三个元素:初始化(获取耗材),终止条件(是否有更多脏窗口?)和更新(转到下一个窗口)。在第一次迭代之前执行初始化步骤一次。在每次迭代之前测试终止条件(并且如果它评估为false则循环终止),并且在每次迭代之后执行更新步骤,然后测试下一次迭代的终止条件。当循环正常终止时,计算机接下来在循环体之后立即执行语句。

    继续这个愚蠢的例子:

    for (
        int window_number = 0;
        window_number < TOTAL_NUMBER_OF_WINDOWS;
        window_number = window_number + 1) {
    
        Window currentWindow = windows[window_number];
    
        do {
    
            cleaner.spray(currentWindow);
            cloth.wipe(currentWindow);
    
        } while (currentWindow.isDirty());
    
    }
    

    在这种情况下,我使用不同的循环结构(do { ... } while)表示内部循环,因为它更自然地适用于不需要初始化步骤的事实,我不需要在之前测试终止第一次迭代,更新步骤在循环体内执行。但是,由于在第一次迭代之前测试终止条件实际上并不是有害的,所以我也可以将内部循环写为for循环。我只是留下我不需要空白的部分(但我总是需要两个分号分隔符):

    for (
        int window_number = 0;
        window_number < TOTAL_NUMBER_OF_WINDOWS;
        window_number = window_number + 1) {
    
        Window currentWindow = windows[window_number];
    
        for (
            /* no initialization */ ;
            currentWindow.isDirty();
            /* no (additional) update */) {
    
            cleaner.spray(currentWindow);
            cloth.wipe(currentWindow);
    
        }
    
    }
    

    这就是你需要了解的关于一般循环和特别是for循环的大部分内容。

答案 1 :(得分:1)

当我们在另一个循环的主体内放置一个循环时,称为嵌套循环。外循环将控制内循环的完整重复次数,这意味着由于条件a&lt; 10,下面示例中的内循环将至少运行10次。

在下面的示例&#34;打印B&#34;将出现200次,即20 * 10.外环A将运行内环B 10次。并且由于内部循环B被配置为运行20次,因此打印B将出现的总次数为200次。

// Loop: A
for(int a=0;a< 10;a++) {
    // Loop: B
    for(int b=1;b<20;b++) {
        System.out.println("Print B");
    }
}

答案 2 :(得分:1)

有许多不同类型的for循环,但都表现相似。

for循环的基本思想是,只要迭代器在某个范围内,for循环块内的代码就会迭代。

    for(int i = 0; i < 10; i++) 
    {
        int x = i;
    }

在这里的代码(C ++)中,迭代器是i,代码块是int x = i。这意味着代码块将从i = 0到i = 9执行,每次将x设置为i,然后将i的值增加1.

您可以在此处看到其他说明:C++ For Loops

如果您使用的是Java:Java For Loops

嵌套for循环以相同的方式工作,唯一的区别是对于外循环的每次迭代,你完全迭代内循环。

    for(int i = 0; i < 3; i++)
    {
       for(int j = 0; j < 5; i++)
       {
         int x = j;
       }
    }

在这里你看到每次在第一个for循环中执行代码时,你将执行内部for循环中的代码完成,或者直到j等于5.然后你迭代外循环并再次运行它。

希望这有帮助。