【问题标题】:Using methods on objects in a 2D array对二维数组中的对象使用方法
【发布时间】:2014-05-25 02:05:48
【问题描述】:

我在尝试对二维数组中的对象使用方法时收到空指针异常。

我是这样声明数组的:

Color[][] rgbArray = new Color[height][width];

这显然是一个颜色对象的数组。然后我使用以下方法将颜色对象添加到数组中:

for (int y = 0; y < (height); ++y) {
    for (int x = 0; x < (width); ++x) {

        rgbArray[y][x] = new Color(img.getRGB(x, y));
    }
}

这是使用缓冲图像“img”中的 rgb 值在适当的数组索引处创建颜色对象。

然后我尝试使用类似这样的方式访问这些值:

for (int y = tempStartlimit; y < (tempEndlimit); ++y) {
    for (int x = tempStartlimit; x < (tempEndlimit); ++x) {

        int red += rgbArray[y][x].getRed();
        int green += rgbArray[y][x].getGreen();
        int blue += rgbArray[y][x].getBlue();
    }
}

为什么这不起作用?

非常感谢任何帮助。

【问题讨论】:

  • 哪一行代码抛出了 NPE?是img 还是null
  • tempStartlimit 和 tempEndlimit 的值是多少?
  • 对于这样的问题,您至少要发布堆栈的前几行。更好的是,只要看看它们,你应该就能弄清楚自己了。
  • @fluffybonkers 这并没有说清楚,只是增加了混乱。
  • 你能发布完整的代码吗?我的猜测是你有一个错误,比如 Color[][] rgbArray; 在类中声明为一个字段,而在构造函数中你有 Color[][] rgbArray = new Color[height][width]; (这是一个新声明并隐藏了该字段)但是用这么小的 sn-p 是不可能的.

标签: java arrays object image-processing


【解决方案1】:

您对两个维度都使用tempEndlimit,但在初始化期间使用heightwidth。您确定tempEndLimit 小于两者吗?否则就是你的答案。您的意思是使用 2 个限制吗?

【讨论】:

  • 我相信是的。我正在尝试访问一系列 2x2 块中的数组,例如访问前两行前两列中的前 2 个值。然后对前两行中的下两列等再次执行此操作。
  • 数组被实例化为new Color[height][width],因此很明显数组至少在最初是完全填充的。
  • @fluffybonkers 那么也许你的数组甚至不是 x ?或者你停在边缘的逻辑是错误的。您需要查看温度限制。
  • 下标问题可能会导致ArrayIndexOutOfBoundsException,但我不知道它会如何导致NPE。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2015-01-07
  • 1970-01-01
相关资源
最近更新 更多