好吧,这似乎真的很愚蠢,但请耐心等待。一年前,我做了一个小程序,对图像进行各种操作,现在我有点生疏,不得不做一些模糊的相似的事情。我正在查看旧的应用程序,以帮助我开始,但有一个非常简单的事情,我的头不想理解刚才的逻辑。基本上我循环遍历图像中的每个像素以便对该位置执行某些操作,现在究竟无关紧要。这是基本的想法:
for (int x = 0; x < inputImage.getWidth(); x++) {
for(int y = 0; y < inputImage.getHeight(); y++) {
*code in here*
}
}
现在我得不到的是这个。当然,嵌套for循环的逻辑意味着在每个循环之后,x和y都会递增。所以在第一遍中,x = 0,y = 0.第二遍,x = 1,y = 1,依此类推。这意味着你只选择从图像左上角到右下角的对角线像素,错过了大量的像素,例如位于x = 0,y = 1的像素。我知道这很简单,肯定会使感觉但我现在还没有得到逻辑!非常感谢。
答案 0 :(得分:1)
不,那不是嵌套循环所做的。 y
循环完全位于x
循环的主体内(这意味着嵌套),因此整个 y
循环在每次迭代时运行x
循环。
x = 0
y = 0, y = 1, y = 2, ...
x = 1
y = 0, y = 1, y = 2, ...
如果你想要的话,你想到的行为,只能迭代对角线元素,可以这样实现:
for (int x = 0, int y = 0;
x < inputImage.getWidth && y < inputImage.getHeight;
x++, y++) {
// stuff
}
注意x
和y
在同一循环中的递增方式;没有嵌套的“subloop”。 (免责声明:我有一段时间没有完成Java,我可能有点搞砸了语法)
答案 1 :(得分:1)
没有。 x
和y
实际上并未同时增加。
y
到0
的每inputImage.height-1
, x
从0
转到inputImage.width-1
。这意味着,您在移动到图像上的另一列之前完全遍历第一列,依此类推。