gpt4 book ai didi

java - 从 ArrayList 元素复制数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:37 26 4
gpt4 key购买 nike

我正在用 Swing 构建一个基于 Java 的游戏,它本质上是一个 Jbutton 网格

我有一个名为 Cell 的对象,它是一个带有附加参数的自定义 JButton,用于存储对象。游戏网格由 Cell[][]

表示

我有一个 Cell[][] 类型的数组列表,允许我在每次移动后存储游戏网格的状态。如果我想撤消移动,我需要将 ArrayList 的最后一个元素复制到游戏网格以使其显示在 UI 上。

我的 gamegrid 是 panelHolder,我的 arraylist 是 moveHolder

到目前为止,我已经尝试了 Collections.copy(panelHolder, moveHolder.get(moveHolder.size())); 由于“参数不适用于类型 单元格[][]

我也尝试过 System.arraycopy(moveHolder.get(moveHolder.size()-1), 0, panelHolder, 0, panelHolder.length);,它会抛出并越界异常(exception)。最初我认为这是由于 moveHolder.size()-1 造成的,但即使是 moveHolder.size() 它也有同样的问题。

我在 StackOverflow 和其他网站上发现了很多问题,它们都展示了这两种方法,但我似乎无法让它发挥作用。有什么更明显的我想念的吗?下面是完整的类方法:

 public class UndoClass implements MoveCommand{

public ArrayList<Cell[][]> moveHolder = new ArrayList<Cell[][]>();

public Cell[][] execute(Cell[][] panelHolder) {
if (moveHolder.size() > 0){
Collections.copy(panelHolder, moveHolder.get(moveHolder.size()));
if (moveHolder.size() > 0){
moveHolder.remove(moveHolder.size());
}
}
System.out.println("Move Undone. Undos available:" + moveHolder.size());
return panelHolder;
}
public void addMove(Cell[][] panelHolder){
moveHolder.add(panelHolder);
}

public ArrayList<Cell[][]> getMoves(){
return moveHolder;
}
}

细胞类

public class Cell extends JButton {

int co_x = 0;
int co_y = 0;


ArrayList<Players> current = new ArrayList <Players>();

}

最佳答案

只是想指出我们的 execute(...) 方法接受 Cell[][] 作为参数和返回参数。该方法将强制您的所有命令继续将输入参数数组复制到返回语句数组。请注意,如果您不需要使两者保持同步并且只使用返回参数,则根本不必担心复制:

Cell[][] lastState = moveHolder.get(moveHolder.size()-1);
moveHolder.remove(moveHolder.size()-1);
return lastState; // Not updating the panelHolder array, just returning

当然现在输入参数和返回不同步了。相反,您可能希望将该状态封装到单个对象中,以使您的生活更轻松。像这样的东西(注意现在执行返回一个空值):

public ArrayList<GameState> previousStates = new ArrayList<GameState>();

public void execute(GameState currentState) {
if (previousStates .size() > 0) {
GameState lastState = previousStates.get(previousStates.size()-1);
currentState.restoreFrom(lastState);
previousStates .remove(moveHolder.size()-1);
}
}

祝游戏好运!

关于java - 从 ArrayList 元素复制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31273666/

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