计算二维数组中特定对象的数量 Java

Counting the amount of a specific object in 2D Array Java

在我的 CS class 的西洋跳棋游戏中,我 运行 遇到了计算棋盘上有多少特定颜色棋子的麻烦。 这是 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 中的游戏时,即使代码编译时也会抛出空指针异常。即使声明了所有内容,所有内容都有指向的内容。有什么建议吗?

我发现您的代码存在两个主要问题:

  1. 您正在为 x 迭代 0-8 个元素,为 y 迭代 0-12 个元素,但在声明中,您有 0-7 个 x 和相同的 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;
}

但我觉得还是不符合逻辑。

好的,一些事情...

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

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

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