2014-02-19 133 views
0

我写这个方法:ArrayIndexOutOfBounds,不知道为什么?

public static Bitmap matrixToBitmap(int[][] slika) 
    { 

     int w = slika[0].length; 
     int h = slika[1].length; 

     Bitmap into = Bitmap.createBitmap(w, h, Config.ARGB_8888); 
     for (int x = 0; x < w; x++) 
     { 

      for (int y = 0; y < h; y++) 
      { 
       if(slika[x][y] < 128) 
        into.setPixel(x, y, Color.BLACK); 
       else 
        into.setPixel(x, y, Color.WHITE); 

      } 
     } 

     return into; 
    } 

,当我把它叫做我有int[454][454]阵列Android应用内,它说这Logcat

Caused by: java.lang.ArrayIndexOutOfBoundsException: length=452; index=452 

这行matrixToBitmap方法的指点:

 if(slika[x][y] < 128) 

有人可以为什么会这样呢? wh的值分别为454和454,就像它们应该是一样。

+0

数组索引相对于数组长度的界限是什么? –

+1

只需要注意一点:你应该使用int w = slika.length;而不是int w = slika [0] .length;'就这样,'w'和'h'将始终是相同的,即使数组的维度不是。 – jonhopkins

+0

你的'w'应该是'slika.length',而不是'slika [0] .length' – fge

回答

2

错误是在这里:

int w = slika[0].length; 
int h = slika[1].length; 

什么发生的事情是,你从你的阵列设置了第一排的长度为w,和你的第二排的长度要h

,使其工作,将其更改为:

int w = slika.length; 
int h = slika[0].length; 
+0

按照每个问题,一个大小为“int [454] [454]”的数组已经通过了,我怀疑是否正确地提到了这个数组。如果问题陈述是真实的,那么错误日志细节是不正确的。 – sakura

+0

非常感谢,这解决了它! – user3213132

+0

现在我发现实际上int [452] [454]通过了,调试时我和w和h值混淆了,实际上是454和454,因为我的错误,这个答案被纠正了! – user3213132

相关问题