我正在尝试读取图像文件的数量,我想将它们相互比较。我创建了一个大小为5的数组对象,并为其分配了5个图像。我试图通过将数组对象传递给方法来比较每个图像。但它显示了一个错误。任何人都可以帮助我吗?
File[] f= new File[5];
f[1]= new File("p1.png");
f[2]= new File("p2.png");
f[3]= new File("p3.png");
f[4]= new File("p4.png");
f[5]=new file("p5.png");
for(int i=1;i<5;i++)
{
compare(f[i],f[i++]);
}
public void compare(File fi[1],File fi[2])
{
BufferedImage image = ImageIO.read(fi[1]);
int width = image.getWidth(null);
int height = image.getHeight(null);
int[][] clr= new int[width][height];
BufferedImage images = ImageIO.read(fi[2]);
int widthe = images.getWidth(null);
int heighte = images.getHeight(null);
int[][] clre= new int[widthe][heighte];
}
答案 0 :(得分:2)
几个问题:
这一行
public void compare(File fi[1],File fi[2])
是语法错误。它应该是
public void compare(File f1, File f2)
(显然args的名字取决于你)。
调用时,请使用
compare(f[i], f[i + 1]);
而不是i++
。
此行尝试写入不存在的数组槽:
f[5]=new file("p5.png");
...因为您的数组定义为new File[5]
,这意味着它有0
到4
的广告位。您需要更改广告位中的所有行设置值,以使用0
到4
而不是1
到5
。
您的循环边界错误。它们应该是0
和< f.length - 1
而不是1
和< 5
:
for(int i = 0; i < f.length - 1; i++)
执行< f.length - 1
而不是< 5
有两个原因。首先,因为您在循环体中使用i + 1
,所以您希望提前停止一个插槽。其次,如果您稍后更改f
的长度,则必须记住更新5
循环上的for
,这是一个等待发生的维护问题。 (注意循环是i < f.length - 1
,因为你在循环体中使用i + 1
。通常循环是0
到< length
,但在这种情况下不是。)
我在那时停止阅读代码,因此无法保证没有其他基本问题。我建议您学习一些基本的Java教程。
答案 1 :(得分:0)
数组的索引是从0而不是1.而不是:
File[] f= new File[5];
f[1]= new File("p1.png");
f[2]= new File("p2.png");
f[3]= new File("p3.png");
f[4]= new File("p4.png");
f[5]=new file("p5.png");
使用此:
File[] f= new File[5];
f[0]= new File("p1.png");
f[1]= new File("p2.png");
f[2]= new File("p3.png");
f[3]= new File("p4.png");
f[4]=new file("p5.png");
答案 2 :(得分:0)
将您的方法签名更改为
public void compare(File fi1,File f2)
答案 3 :(得分:0)
您的代码存在一些问题。
首先,你的for循环应该使用退出条件i < f.length-1
其次,您的compare方法不需要数组引用:
public void compare(File f1, File f2) {
....
}
第三,索引从0开始,而不是1。
答案 4 :(得分:0)
更改此行
public void compare(File fi[1],File fi[2]){
到
public void compare(File fi,File fi2) {
或
public void compare(File[] fi,File[] fi2) {
答案 5 :(得分:0)
大小为5的数组从0-4开始但是 您正在访问索引5
File[] f= new File[5];
f[1]= new File("p1.png");
f[2]= new File("p2.png");
f[3]= new File("p3.png");
f[4]= new File("p4.png");
f[5]=new file("p5.png"); // This is wrong
值应为0-4
还
for(int i=1;i<5;i++)
{
compare(f[i],f[i++]);
如果i == 4那么i ++就会变成,所以你会得到ArrayIndexOutOfBoundsException
}
我不会提及其余的错误,因为其他答案已经发布了
答案 6 :(得分:0)
你的意思是相互比较?
for (int i = 0; i < f.length; i++)
{
for(int j=i+1;j<f.length;j++){
compare(f[i], f[j]);
}
}
答案 7 :(得分:-1)
File[] f= new File[6];
f[1]= new File("p1.png");
f[2]= new File("p2.png");
f[3]= new File("p3.png");
f[4]= new File("p4.png");
f[5]=new file("p5.png");
for(int i=1;i<5;i++)
{
compare(f[i],f[i+1]);
}
public void compare(File f1,File f2)
{
BufferedImage image = ImageIO.read(f1);
BufferedImage image = ImageIO.read(f2);
// compare as you like
}