gpt4 book ai didi

java - 尝试将子类对象添加到父类(super class)数组时出现 ArrayStoreException 错误

转载 作者:行者123 更新时间:2023-12-01 09:03:22 24 4
gpt4 key购买 nike

我正在制作跳棋游戏并有以下类(class)。抽象类部分:

public abstract class Piece {

protected Position position;
private CheckersColor color;

public Piece(CheckersColor color, Position position) {
this.position = position;
this.color = color;

}

还有更多方法。

检查器子类:

public class Checker extends Piece {

public Checker(CheckersColor color, Position position) {
super(color, position);
}

还有更多方法,以及另一个子类 king:

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);

到目前为止,一切正常,但是当我尝试将其中一个跳棋变为国王时,出现错误:

Exception in thread "main" java.lang.ArrayStoreException: King

导致错误的代码:

whiteCheckers[i] = new King(piece);

我尝试了几种不同的方法来存储它,包括类型转换、移除棋子以及在同一位置添加国王等等,但都没有成功。

这对我来说真的很奇怪,因为跳棋的存储没有问题,而 king 会导致错误,而它们都是 Piece 的子类。

非常感谢!

编辑:

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);

}
}
}
....
}
}

}

最佳答案

你能告诉我们数组是如何初始化的吗?原因可能是您按如下方式初始化数组:

Piece[] whiteCheckers = new Checker[n];

而不是

Piece[] whiteCheckers = new Piece[n];

这不允许您向其中添加 King 类型的对象。

但是,如果没有看到数组是如何初始化的,情况可能并非如此。

关于java - 尝试将子类对象添加到父类(super class)数组时出现 ArrayStoreException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41494771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com