在Java中运行以下代码给我一个“ArrayIndexOutOfBoundsException:215737344”
但S.O.P声明打印“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;
}
}
}
}
}
答案 0 :(得分:0)
imageArray
的尺寸为215737344
但您正尝试访问for loop
内的索引215737344。
如下所示更改您的代码,并尝试调试:
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");
}
答案 1 :(得分: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
吗?我认为如果你想在imageArray
中每3个单元格添加相同的字节,这应该可行。 if
检查是因为我坦率地对你的循环感到困惑。如果你确定image_at
赢了,你可能会删除它
超出界限。