【发布时间】:2023-04-05 08:17:01
【问题描述】:
我正在构建一个可以从控制台或命令行玩的河内塔游戏。请注意,这不是递归程序;我正在尝试构建一个用户可以玩的游戏。我正在使用 ArrayLists 的 ArrayList 来存储用户选择的 pegs(1,2,3) 和 discs(N)。
我的实例变量和构造函数:
private ArrayList lists;
private ArrayList peg1 = new ArrayList<>();
private ArrayList peg2 = new ArrayList<>();
private ArrayList peg3 = new ArrayList<>();
//Constructor
public TowersOfHanoi() {
ArrayList<Integer>[] lists = new ArrayList[3];
lists[0]= this.peg1;
lists[1]= this.peg2;
lists[2]= this.peg3;
}
我如何初始化游戏
public ArrayList initializeGame(int n) {
for (int i = 1; i < n; i++) {
peg1.add(i);
}
}
我正在尝试制作一个 move 方法,它将两个 INTS 作为 from 和 to 帖子的参数。 IE。用户将圆盘从 N 柱移到 N 柱,并检查该移动是否合法。
在过去的几个小时里,我一直试图解决这个问题,但我什至无法弄清楚如何获得合适的挂钩并将磁盘从一个挂钩移到另一个挂钩,更不用说检查是否没有更大的磁盘被移动到一个较小的磁盘上。这是我想出的方法,我得到一个空指针异常,这让我认为lists 没有正确初始化。这是我的方法,显然是错误的。
public void move(int moveFrom, int moveTo){
lists.get(moveTo)
lists.add(0, moveTo);
}
那么任何人都可以帮助我了解如何使用 int 作为索引来获取适当的 peg(int 由用户输入)并移动磁盘吗?
【问题讨论】:
-
您的
lists数组正在遮蔽lists字段(顺便说一下,这是一个ArrayList,而不是数组)。因此,该字段永远不会被分配并以null作为默认值。 -
好的,我明白你在说什么,我已更改为
this.lists = new ArrayList[3]。但是,我的 move 方法仍然是错误的,只是不知道如何处理这里的逻辑。
标签: java arraylist towers-of-hanoi