在我们的计算机课上,我们得到了一个任务,可以通过像素处理图像,而我实际上不知道从哪里开始,这使我意识到我对嵌套循环缺乏了解。
我了解for循环的正常工作方式,但是我很难理解一个循环“循环”另一个循环的功能。我在YouTube上看过了这些教程,他们将使用嵌套循环创建模式,但是他们几乎不解释其背后的过程。
最简单的理解方法是什么?
答案 0 :(得分:1)
例如,假设您有一张学生表及其所有作业的成绩。
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数组中,该数组首先由Student索引,然后由Homework Assignment索引。
这可以通过for循环来完成。
for (int i = 0; i < allgrades.length; i += 1) {
}
现在,我们要检索每个学生的成绩。如果我们获得了一个学生studentgrades
的分数数组,则可以执行以下操作来获取所有学生作业的分数总和:
let sumgrades = 0;
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];
}
}
在此代码的末尾,要获得任何作业的平均成绩,需要做的就是将sumgrades
-总数除以作业数*学生数。
此聚合是嵌套循环的示例。
举一个关于图像处理的例子,假设我们要拍摄图像并将每个像素的RGB值减半。
我们可以在一个循环中迭代图像的第一维(本质上是2D数组),而在嵌套循环中,可以迭代另一维。
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;
}
}
这会在图像上进行嵌套循环,从各个像素获取值并使用该数据。
我希望这个答案为理解嵌套循环用法提供了充分的例子。