2014-02-19 182 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

相關問題