繁体   English   中英

在Java中将数组对象作为方法参数传递

[英]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]; 
}

几个问题:

  1. 这条线

     public void compare(File fi[1],File fi[2]) 

    是语法错误。 它应该是

     public void compare(File f1, File f2) 

    (显然,args的名称取决于您)。

  2. 调用时,使用

     compare(f[i], f[i + 1]); 

    而不是i++

  3. 该行尝试写入不存在的阵列插槽:

      f[5]=new file("p5.png"); 

    ...因为您的数组定义为new File[5] ,这意味着它具有插槽04 您需要将插槽中的所有行设置值更改为使用04而不是15

  4. 您的循环边界是错误的。 它们应为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM