我正在制作一个跳棋游戏,并有以下课程。 摘要类:
public abstract class Piece {
protected Position position;
private CheckersColor color;
public Piece(CheckersColor color, Position position) {
this.position = position;
this.color = color;
}
使用更多方法。
子类Checker:
public class Checker extends Piece {
public Checker(CheckersColor color, Position position) {
super(color, position);
}
还有一些方法,还有另一个子类王:
public class King extends Piece {
public King(CheckersColor color, Position position) {
super(color, position);
}
public King(Piece checker) {
super(checker.getColor(), checker.position);
}
检查器存储在Piece
类型的数组中private Piece[] whiteCheckers;
并插入:
whiteCheckers[counter] = new Checker(Constants.COLOR_WHITE, tempPosition);
到目前为止一切正常,但当我尝试将其中一个棋子改为国王时,我收到了错误:
线程“main”中的异常java.lang.ArrayStoreException:King
导致错误的代码:
whiteCheckers[i] = new King(piece);
我已经尝试了几种不同的方式来存储它,使用铸造,移除检查器并在相同位置添加国王以及更多而没有运气。
这对我来说真的很奇怪,因为检查器存储没有问题,而且当它们都是Piece的子类时,king会导致错误。
非常感谢!
修改
public class Board {
private int size;
private Piece[] blackCheckers;
private Piece[] whiteCheckers;
private Piece[][] board;
public Board(int size) {
....(Some other code)
for (int k = 0; k < whiteCheckers.length; k++) {
board[whiteCheckers[k].position.getRow()][whiteCheckers[k].position.getColumn()] = whiteCheckers[k];
board[blackCheckers[k].position.getRow()][blackCheckers[k].position.getColumn()] = blackCheckers[k];
}
} else {
throw new RuntimeException("The size is either smaller than 4 or is not even");
}
}
....(Some more methods)
public void verifyCrown(Piece piece) {
if ((piece.getColor().equals(Constants.COLOR_WHITE) && piece.position.getRow() == 0)
|| piece.getColor().equals(Constants.COLOR_BLACK) && piece.position.getRow() == size - 1) {
if (piece.getColor().equals(Constants.COLOR_WHITE)) {
for (int i = 0; i < whiteCheckers.length; i++) {
if (whiteCheckers[i].equals(piece)) {
whiteCheckers[i] = new King(piece);
}
}
}
if (piece.getColor().equals(Constants.COLOR_BLACK)) {
for (int i = 0; i < blackCheckers.length; i++) {
if (blackCheckers[i].equals(piece)) {
blackCheckers[i] = new King(piece);
}
}
}
....
}
}
}
答案 0 :(得分:1)
您能告诉我们数组是如何初始化的吗? 原因可能是您按如下方式初始化数组:
Piece[] whiteCheckers = new Checker[n];
而不是
Piece[] whiteCheckers = new Piece[n];
不允许您向其添加King
类型的对象。
但是再次没有看到数组是如何初始化的,情况可能并非如此。