【问题标题】:Counting the amount of a specific object in 2D Array Java在 2D Array Java 中计算特定对象的数量
【发布时间】:2017-05-25 07:26:59
【问题描述】:

在我的 CS 课程的跳棋游戏中,我遇到了计算棋盘上有多少特定颜色的问题。 这是getter方法:

 public int getCheckersBlue()
{
    int counter = 0;
    for(int x = 0; x <= 8; x++)
    {
        for(int y = 0; y <= 12; y++)
        {
            if(c[x][y].equals(Color.BLUE))
            {
                counter++;
            }
        }
    }
    return counter;
}

c的构造函数:

private CheckersBoard[][] c = new CheckersBoard[8][8];

每当尝试在 Greenfoot 中运行游戏时,都会引发空指针异常,即使在代码编译时也是如此。即使声明了所有内容,所有内容都有它所指向的内容。有什么建议吗?

【问题讨论】:

  • 请注意,使用c 构造函数,您正在创建一个CheckersBoard 对象数组数组,这可能不是您想要的
  • 1- Nullpointer :c 在 [0][0]、[0][1] 等位置似乎为空。 2-代码看起来不正确,因为您只初始化了 8 个数组,但您想迭代 12 次,因此如果您修复空指针,则会得到 ArrayIndexOutOfBoundsException。

标签: java arrays multidimensional-array counter getter


【解决方案1】:

我发现您的代码中有两个主要问题:

  1. 您为 x 迭代 0-8 个元素,为 y 迭代 0-12 个元素,但在声明中,x 为 0-7,y 相同
  2. NullPointerException。这是因为数组声明将用空值填充您的数组,因此您将 nullColor.Blue 进行比较,这是不正确的。

通过这两个修复代码将如下所示

public int getCheckersBlue()
{
    int counter = 0;
    for(int x = 0; x < 8; x++)
    {
        for(int y = 0; y < 8; y++)
        {
            if(Color.BLUE.equals(c[x][y]))
            {
                counter++;
            }
        }
    }
    return counter;
}

但我觉得还是逻辑不正确。

【讨论】:

    【解决方案2】:

    好的,有一些事情......

    1. 您在内部循环中每次迭代 12,而它应该是 8。

    2. Color.Blue 是JavaFX Paint,我相信。这不是你应该使用的。除非您已经制作了自己的 Enumeration type 颜色,否则您应该这样做。这是一个link,说明如何使用相关示例进行操作。

    3. 您正在检查两种不同类型的相等性:CheckersBoardColor。如果我们想要在命名上完全符合逻辑,您应该有一个 CheckersBoard.getSpace(x, y).getColor()CheckersBoard.getSpace(x, y).getOccupancy()(应该有一个 NoOccupancy 选项)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 2015-07-27
      • 1970-01-01
      相关资源
      最近更新 更多