0

Java で次のコードを実行すると、「ArrayIndexOutOfBoundsException: 215737344」が発生します。

しかし、SOP ステートメントは「215737344」を出力します。ループを実行する必要があるのに、なぜループが続くのでしょうか?

public static final int DICE_SIDE_LENGTH = 16;

static int width = 9792;
static int height = 7344;

public static void main(String args[]) throws FileNotFoundException{
    byte[] imageArray = new byte[width * height * 3];
    int image_at=0;
    System.out.println((height/DICE_SIDE_LENGTH) * DICE_SIDE_LENGTH * (width/DICE_SIDE_LENGTH) * 16 *3 );
    for(int row = 0; row<height/DICE_SIDE_LENGTH; row++){
        int[] diceArray = new int[width/DICE_SIDE_LENGTH];  
        for(int p=0; p<DICE_SIDE_LENGTH; p++){
            for(int die: diceArray){
                byte[] dice_row = new byte[16];
                for(int i=0; i<dice_row.length; i++){
                    imageArray[i + image_at]=dice_row[i];
                    imageArray[i + image_at+ 1]=dice_row[i];
                    imageArray[i + image_at + 2]=dice_row[i];
                    image_at+=3;
                }
            }
        }
    }
}
4

2 に答える 2

0
for(int i=0; i<dice_row.length; i++){
   if(image_at<(width * height *3){
          imageArray[image_at]=dice_row[i];
          imageArray[image_at+ 1]=dice_row[i];
          imageArray[image_at + 2]=dice_row[i];
          image_at+=3;
                    }

そこに本当にそれが必要iですか?の3セルごとに同じバイトを追加したい場合、これはうまくいくと思いますimageArrayif私は率直に言ってあなたのループに少し混乱しているので、チェックがあります。image_at範囲外に出ないことが確実な場合は、おそらく削除できます。

于 2013-11-13T06:10:34.100 に答える
0

あなたのサイズimageArray215737344

しかし、あなたは 内のインデックス 215737344 にアクセスしようとしていますfor loop

以下に示すようにコードを変更し、デバッグを試みます。

                    int i = 0;
                    try {
                        for(i=0; i<dice_row.length; i++){
                            imageArray[i + image_at]=dice_row[i];
                            imageArray[i + image_at+ 1]=dice_row[i];
                            imageArray[i + image_at + 2]=dice_row[i];
                            image_at+=3;
                        }
                    } catch (ArrayIndexOutOfBoundsException e) {
                        System.out.println("Exception");
                    }
于 2013-11-13T05:55:42.780 に答える