计算2D Array Java中特定对象的数量

时间:2017-05-25 07:26:59

标签: java arrays multidimensional-array counter getter

在我的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中运行游戏时,即使代码编译,也会抛出空指针异常。即使宣布了一切,一切都有它指向的东西。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我在您的代码中看到两个主要问题:

  1. 你为x重复0到8个元素,为y重复0到12,但在声明中你有0到0的x和y相同的
  2. NullPointerException。这是因为数组声明会使您的数组填充空值,因此您要将nullColor.Blue进行比较,这是不正确的。
  3. 使用这两个修复程序代码将如下所示

    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 :(得分:0)

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

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

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

  3. 您正在检查两种不同类型的平等:CheckersBoardColor。如果我们希望通过命名完全符合逻辑,那么您应该有CheckersBoard.getSpace(x, y).getColor()CheckersBoard.getSpace(x, y).getOccupancy()(应该有 NoOccupancy 选项)。