Nested loops 理解嵌套循环

Nested loops 理解嵌套循环,nested-loops,Nested Loops,在我的计算机课上,我们被分配了一项任务,通过像素来操纵图像,而我实际上不知道从哪里开始,这让我意识到我对嵌套循环缺乏理解 我理解for循环的正常工作方式,但我很难理解一个循环“循环”另一个循环的功能。我在Youtube上看过这些教程,他们会使用嵌套循环创建模式,但他们几乎没有解释其背后的过程 最简单的理解方法是什么?比如说,你有一张学生表,上面列出了他们在所有家庭作业中的成绩 Homework Grades Student HW1 HW2 HW3 HW4 A 9

在我的计算机课上,我们被分配了一项任务,通过像素来操纵图像,而我实际上不知道从哪里开始,这让我意识到我对嵌套循环缺乏理解

我理解for循环的正常工作方式,但我很难理解一个循环“循环”另一个循环的功能。我在Youtube上看过这些教程,他们会使用嵌套循环创建模式,但他们几乎没有解释其背后的过程


最简单的理解方法是什么?

比如说,你有一张学生表,上面列出了他们在所有家庭作业中的成绩

        Homework Grades
Student HW1  HW2  HW3  HW4
A       90   80   78   64
B       70   65   58   54
C       96   88   98   84
D       96   85   72   68
假设您想计算本课程作业的平均分数

现在,每个学生的家庭作业都有不同的分数。我们知道作业的总分数等于作业的数量*学生的数量,因此任何作业的平均分数都是所有分数的总和除以分数

我们可以通过学生或家庭作业进行汇总。在这种情况下,我们将按学生汇总。我们假设数据存储在名为
allgrades
的2D数组中,首先由学生索引,然后由家庭作业索引

这可以通过for循环完成

for (int i = 0; i < allgrades.length; i += 1) {

}
现在,如果我们想将其扩展到所有学生,我们可以将其嵌套在另一个for循环中,以聚合所有成绩

let sumgrades = 0;
for (int i = 0; i < allgrades.length; i += 1) {
    let studentgrades = allgrades[i];
    for (int j = 0; j < studentgrades.length; j += 1) {
        sumgrades += studentgrades[j];
    }
}
这会在图像上执行嵌套循环,从各个像素获取值并使用该数据


我希望这个答案为理解嵌套循环的用法提供了一个充分的例子。

最好指出您正在使用的语言。这样人们就可以用具体的例子来帮助你。但通常嵌套外观允许您像图像一样遍历二维对象。外部循环从一行到下一行,而内部循环从一行的开始到该行的结束。这允许您浏览图像中的所有像素。想一想你想如何通过所有的像素。我会从头到尾扫描第一行,然后移动到下一行的开头,然后重新开始。这就是嵌套for循环的基本功能。如果要逐列读取图像,可以将外部循环与内部循环交换。这将从第一列的顶部到底部读取像素,然后在第二列的顶部重新开始。
let sumgrades = 0;
for (int i = 0; i < allgrades.length; i += 1) {
    let studentgrades = allgrades[i];
    for (int j = 0; j < studentgrades.length; j += 1) {
        sumgrades += studentgrades[j];
    }
}
for (int i = 0; i < canvasWidth; i += 1) {
  for (int j = 0; j < canvasHeight; j += 1) {
    Pixel oldpixel = pixel(i, j);
    Pixel newpixel = Pixel();
    int newred = oldpixel.r/2;
    int newgrn = oldpixel.g/2;
    int newblu = oldpixel.b/2;

    newpixel.r = newred;
    newpixel.g = newgrn;
    newpixel.b = newblu;

    outputImage.pixel(i, j) = newpixel;
  }
}