不知道循环时如何做到这一点

时间:2011-11-16 02:31:08

标签: java while-loop

这是我的代码:

public static void decodeThis(BufferedImage im, String outputFile)
throws FileNotFoundException{
  int w = im.getWidth();
  int h=im.getHeight();
  int[] arr=im.getRGB(0, 0, w, h, null, 0, w);
  int[] eightBit=new int[8];
  int counter=0;
  String[] aString=new String[arr.length];
  PrintStream out=new PrintStream(new File(outputFile));
  double value=0;
  int intVal=0;
  while (counter<arr.length){
    for (int j=0;j<eightBit.length;j++){
        eightBit[j] = arr[j+counter] & 1; //Extracts least significant bit, puts into eightBit array.
    }
    value=0;
    for (int x=0;x<eightBit.length;x++){
        value+=eightBit[x]*(Math.pow(2,x));
    }
    intVal=(int)value;
    out.print((char)intVal);
    counter=counter+8;
}

}

我想要做的是从arr读取,提取和转换为8位字符,同时仍然有像素在arr中读取。出于某种原因,当我运行注释for循环时,我得到一个ArrayIndexOutOfBoundsException。我该如何解决?提前谢谢!

2 个答案:

答案 0 :(得分:2)

while(counter<arr.length)循环运行counterarr的长度,内循环使用arr访问j+counter;如果arr不是8的完全倍数,则保证在arr结束时运行。

由于arr是图像中的位数,因此它不太可能是8的精确倍数。

答案 1 :(得分:0)

更改循环条件。

while (counter <= arr.length - 8)