此代码的目的是提取turtle.jpg中每个像素的每个RGB值,但由于某种原因,它会使索引错误超出范围。寻求帮助,谢谢。
int j=1;
int i=1;
BufferedImage img=null; //declares image
try {
File sx=new File("D:/turtle.jpg");
img = ImageIO.read(sx);
System.out.println("Reading complete.");
}
catch(IOException e)
{
System.out.println("Error" + e);
}
for(i=1;i<225;i++);
{
for(j=1;j<225;j++);
{
deh=new Color(img.getRGB(i, j));
int r = deh.getRed();
int g = deh.getGreen();
int b = deh.getBlue();
int a = deh.getAlpha();
System.out.print(r + " " + g + " " + b + " " + a+" ");
}
System.out.println();
}
/*}
catch(IOException e){
System.out.println("error");
}*/
答案 0 :(得分:4)
充满鳗鱼的气垫船是绝对正确的。问题是你的循环变量的范围!如果你做过类似的事情:
class T {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) ; {
for (int j = 0; j < 5; j ++) ; {
System.out.println(i + ", " + j);
}
}
}
}
您可以从编译器中获得以下内容:
T.java:5: error: cannot find symbol
System.out.println(i + ", " + j);
^
symbol: variable i
location: class T
T.java:5: error: cannot find symbol
System.out.println(i + ", " + j);
^
symbol: variable j
location: class T
2 errors
我重新学习的课程:尽可能地减少变量的范围是值得的(而不是更多)。
然而,像Intellij这样的好IDE会帮助发现一个完全难倒的错误(我知道这种感觉):
答案 1 :(得分:2)
您的代码中存在一个明确的问题:
for(i=1;i<225;i++); // <-- wrong semicolon!
{
for(j=1;j<225;j++); // <-- wrong semicolon!
{
分号基本上完成了for
循环的主体,因此内部块在两个循环后执行,其中i==226
和j==226
。删除两个分号。
答案 2 :(得分:0)
除了错误的分号外,不要使用魔术数字/任意数字作为最大像素,使用专用方法获取图像的高度和宽度,否则代码会很容易破解。