将数组对象作为java中的方法参数传递

时间:2013-03-16 09:47:17

标签: java arrays arguments

我正在尝试读取图像文件的数量,我想将它们相互比较。我创建了一个大小为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]; 
}

8 个答案:

答案 0 :(得分:2)

几个问题:

  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的长度,则必须记住更新5循环上的for,这是一个等待发生的维护问题。 (注意循环是i < f.length - 1,因为你在循环体中使用i + 1。通常循环是0< length,但在这种情况下不是。)

  5. 我在那时停止阅读代码,因此无法保证没有其他基本问题。我建议您学习一些基本的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

}