Java中用if语句给二维数组新图像降50单位亮度报找不到i、j错如何解决?
错误原因
- 变量作用域问题:你代码里的
i、j是在嵌套for循环头部定义的局部变量,作用域仅限定在循环对应的代码块范围内,循环结束后这两个变量就被销毁了,你把亮度调整的if逻辑写在循环外部,自然会触发cannot find symbol的编译错误。 - 业务逻辑写反:你当前的判断逻辑是「像素减50小于0时赋值减后的值,否则赋值0」,和需求要求的「减50后小于0则设为0,否则保留减50的结果」完全相反。
修复方案
你可以直接把亮度调整逻辑合并到拷贝数组的循环里,无需单独写循环,修复后的完整代码如下:
import java.util.Arrays; public class Combining { public static void main(String[] args) { int[][] imageData={{100,90,255,80,70,255,60,50}, {255,10,5,255,10,5,255,255}, {255,255,255,0,255,255,255,75}, {255,60,30,0,30,60,255,255}}; int[][] newImage = new int[4][6]; for (int i = 0; i < imageData.length; i++) { for (int j = 0; j < imageData[i].length - 2; j++) { // 取原始像素值计算调整后亮度 int adjustedPixel = imageData[i][j] - 50; // 处理边界值 if(adjustedPixel < 0){ adjustedPixel = 0; } newImage[i][j] = adjustedPixel; } } // 输出最终结果 System.out.println(Arrays.deepToString(newImage)); } }
如果你需要先完成数组拷贝再单独调整亮度,也可以重新写一套嵌套for循环遍历newImage数组做调整,不要直接在循环外部使用仅在循环内有效的i、j变量即可。
内容的提问来源于stack exchange,提问作者Jean Baptiste Asong
相关产品推荐
相关产品推荐

