计算二维数组中特定对象的数量 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 中的游戏时,即使代码编译时也会抛出空指针异常。即使声明了所有内容,所有内容都有指向的内容。有什么建议吗?
我发现您的代码存在两个主要问题:
- 您正在为 x 迭代 0-8 个元素,为 y 迭代 0-12 个元素,但在声明中,您有 0-7 个 x 和相同的 y
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;
}
但我觉得还是不符合逻辑。
好的,一些事情...
你在内部循环中每次都迭代 12,而它应该是 8。
Color.Blue 是 JavaFX Paint
,我相信。这不是你真正应该使用的。除非您已经制作了自己的 Enumeration type
颜色,否则您应该这样做。这里有一个 link 来说明如何通过相关示例来做到这一点。
您正在检查两种不同类型的相等性:CheckersBoard
和 Color
。如果我们希望我们的命名在逻辑上完全合理,您应该有一个 CheckersBoard.getSpace(x, y).getColor()
或 CheckersBoard.getSpace(x, y).getOccupancy()
(它应该有一个 NoOccupancy 选项)。
在我的 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 中的游戏时,即使代码编译时也会抛出空指针异常。即使声明了所有内容,所有内容都有指向的内容。有什么建议吗?
我发现您的代码存在两个主要问题:
- 您正在为 x 迭代 0-8 个元素,为 y 迭代 0-12 个元素,但在声明中,您有 0-7 个 x 和相同的 y
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;
}
但我觉得还是不符合逻辑。
好的,一些事情...
你在内部循环中每次都迭代 12,而它应该是 8。
Color.Blue 是
JavaFX Paint
,我相信。这不是你真正应该使用的。除非您已经制作了自己的Enumeration type
颜色,否则您应该这样做。这里有一个 link 来说明如何通过相关示例来做到这一点。您正在检查两种不同类型的相等性:
CheckersBoard
和Color
。如果我们希望我们的命名在逻辑上完全合理,您应该有一个CheckersBoard.getSpace(x, y).getColor()
或CheckersBoard.getSpace(x, y).getOccupancy()
(它应该有一个 NoOccupancy 选项)。