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