【问题标题】:ArrayIndexOutOfBounds, can't figure why?ArrayIndexOutOfBounds,不知道为什么?
【发布时间】:2014-02-19 14:44:31
【问题描述】:

我写了这个方法:

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;
     }

当我在我的 android 应用程序中使用 int[454][454] 数组调用它时,它会在 Logcat 中这样说:

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

指向matrixToBitmap方法的这一行:

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

有人能弄清楚为什么会这样吗? wh 的值变成 454 和 454,就像它们应该的那样。

【问题讨论】:

  • 数组索引相对于数组长度的界限是多少?
  • 请注意:您应该使用int w = slika.length;,而不是int w = slika[0].length;,事实上,wh 将始终相同,即使数组的维度不同。
  • 你的w 应该是slika.length,而不是slika[0].length
  • 错误消息表明您的假设不正确:如果消息显示长度=452,则它不是 int[454][454]
  • 现在我发现实际上 int[452][454] 被传递了,我在调试时对 w 和 h 值感到困惑,实际上是 454 和 454,因为我的错误是你的答案更正了!谢谢大家!

标签: java android arrays indexoutofboundsexception


【解决方案1】:

错误在这里:

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

发生的事情是,您将数组中第一行的长度设置为 w,将第二行的长度设置为 h

要使其正常工作,请将其更改为:

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

【讨论】:

  • 根据问题,一个大小为int[454][454] 的数组已通过,我怀疑是否正确提及。如果问题陈述为真,则错误日志详细信息不正确。
  • 现在我发现实际上是通过了 int[452][454],并且在调试时我对 w 和 h 值感到困惑,实际上是 454 和 454,因为我的错误是这个答案已更正!
猜你喜欢
  • 1970-01-01
  • 2015-05-01
  • 2016-09-11
  • 2020-02-15
  • 2018-09-10
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多