0

画像ファイルの数を読み込もうとしていて、それらを互いに比較したいです。サイズ 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]; 
}
4

8 に答える 8

2

いくつかの問題:

  1. この行

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

    構文エラーです。そのはず

    public void compare(File f1, File f2)
    

    (明らかに、引数の名前はあなた次第です)。

  2. 呼び出すときは、

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

    ではなくi++

  3. 次の行は、存在しない配列スロットへの書き込みを試みます。

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

    ...あなたの配列は として定義されているので、それはそれを介しnew File[5]てスロットを持っていることを意味します。throughの代わりにthroughを使用するには、スロット内のすべての行設定値を変更する必要があります。040415

  4. ループ境界が間違っています。それらは0and< f.length - 1の代わりに1andである必要があり< 5ます:

    for(int i = 0; i < f.length - 1; i++)
    

    < f.length - 1ではなく実行する理由は 2 つあります< 5。まず、i + 1ループの本体で使うので、早めに1スロット止めたい。第 2 に、後で の長さを変更する場合は、オンザループもf更新することを忘れないでください。これは、発生するのを待っているメンテナンスの問題です。(ループ本体で使用するため、ループは to であることに注意してください。通常、ループはthroughですが、この場合はそうではありません。)5fori < f.length - 1i + 10< length

その時点でコードを読むのをやめたので、他に根本的な問題がないことを保証することはできません。いくつかの基本的な Java チュートリアルを実行することをお勧めします。

于 2013-03-16T09:51:20.777 に答える
0

配列は 1 ではなく 0 からインデックス付けされます。これの代わりに:

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");
于 2013-03-16T09:50:51.263 に答える
0

メソッドの署名をに変更します

public void compare(File fi1,File f2)
于 2013-03-16T09:50:52.937 に答える
0

コードにはいくつかの問題があります。

まず、for ループは終了条件を使用する必要がありますi < f.length-1

次に、compare メソッドは配列参照を必要としません。

public void compare(File f1, File f2) {
    ....
}

第 3 に、インデックスは 1 ではなく 0 から始まります。

于 2013-03-16T09:51:04.143 に答える
0

この行を変更

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

public void compare(File fi,File fi2) {

また

public void compare(File[] fi,File[] fi2) {

于 2013-03-16T09:51:12.357 に答える
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 が発生します。

 }

残りの回答はすでに投稿されているため、残りのエラーについては言及しません

于 2013-03-16T09:52:37.423 に答える
0

お互いを比較するということですか?

for (int i = 0; i < f.length; i++)
    {
        for(int j=i+1;j<f.length;j++){
         compare(f[i], f[j]);
        }
    }
于 2013-03-16T09:55:10.883 に答える
-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

}
于 2013-03-16T10:01:01.703 に答える