[英]Passing array object as method arguments in java
我正在尝试读取图像文件的数量,我想将它们相互比较。 我创建了一个大小为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)
(显然,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
的长度,则必须记住也要在for
循环上更新5
,这是一个维护问题,有待解决。 (请注意,循环是i < f.length - 1
因为您在循环主体中使用了i + 1
。通常,循环是0
到< length
,但在这种情况下不是。)
那时我停止阅读代码,因此不能保证没有其他基本问题。 我建议您阅读一些基本的Java教程。
数组从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");
将您的方法签名更改为
public void compare(File fi1,File f2)
您的代码有一些问题。
首先,您的for循环应使用退出条件i < f.length-1
其次,您的compare方法不需要数组引用:
public void compare(File f1, File f2) {
....
}
第三,索引从0开始,而不是1。
更改此行
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-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,那么我将成为++,因此您将获得ArrayIndexOutOfBoundsException
}
我不会提及其他错误,因为其他答案已经发布了
你是说互相比较吗?
for (int i = 0; i < f.length; i++)
{
for(int j=i+1;j<f.length;j++){
compare(f[i], f[j]);
}
}
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.