我正在尝试读取图像文件的数量,并且我想将它们相互比较。我创建了一个大小为 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];
}
最佳答案
几个问题:
这一行
public void compare(File fi[1],File fi[2])
是一个语法错误。应该是
public void compare(File f1, File f2)
(显然参数的名称由您决定)。
调用时使用
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 教程。
关于java - 在java中将数组对象作为方法参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15447791/