在我的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中运行游戏时,即使代码编译,也会抛出空指针异常。即使宣布了一切,一切都有它指向的东西。有什么建议吗?
答案 0 :(得分:0)
我在您的代码中看到两个主要问题:
NullPointerException
。这是因为数组声明会使您的数组填充空值,因此您要将null
与Color.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 :(得分:0)
好的,有些事情......
每次在内循环中迭代12时,它应该是8。
我相信Color.Blue是JavaFX Paint
。这不是你应该使用的。除非你已经制作了自己的Enumeration type
颜色,否则你应该这样做。以下是关于如何使用相关示例执行此操作的link。
您正在检查两种不同类型的平等:CheckersBoard
和Color
。如果我们希望通过命名完全符合逻辑,那么您应该有CheckersBoard.getSpace(x, y).getColor()
或CheckersBoard.getSpace(x, y).getOccupancy()
(应该有 NoOccupancy 选项)。