我正在使用ArrayLists的ArrayList来进行数据结构的游戏,以进行河内塔的游戏。游戏的构建和初始化如下:
private ArrayList<ArrayList> lists = new ArrayList<ArrayList>();
private ArrayList<Integer> peg1 = new ArrayList<Integer>();
private ArrayList<Integer> peg2 = new ArrayList<Integer>();
private ArrayList<Integer> peg3 = new ArrayList<Integer>();
//Constructor
public TowersOfHanoi() {
lists.add(null);
lists.add(peg1);
lists.add(peg2);
lists.add(peg3);
}
public ArrayList initializeGame(int n) {
for (int i = 0; i < n; i++) {
peg1.add(i+1);
}
return peg1;
}
}
我正在尝试使用布尔方法进行检查,并确保用户不会尝试在较小的光盘上移动较大的光盘,但是,我不明白我将如何获取整数值存储在arrayList中。整数值应作为衡量光盘直径的方法。 I.E. 1小于2小于3等。这是我提出的代码...我相信我只是得到索引而不是存储在那里的整数的实际值。我怎样才能得到实际值?
public boolean isMoveLegal(int moveFrom, int moveTo){
ArrayList<Integer> fromPeg = lists.get(moveFrom);
int x = (fromPeg.remove(0)).intValue();
ArrayList<Integer> toPeg = lists.get(moveTo);
int y = (toPeg.get(0)).compareTo(x);
if(x<y){
System.out.println("illegal move");
}
return false;
}
答案 0 :(得分:1)
此,
int y = (toPeg.get(0)).compareTo(x);
应该是
int y = (toPeg.size() > 0) ? toPeg.get(0).intValue() : -1;
然后你可以使用
if (x > y) { // <-- the reverse of like you were, because the to peg is y.
答案 1 :(得分:1)
您的代码存在的问题是isMoveLegal
没有返回true
的路径:唯一的return语句返回false
。您应该按如下方式更改return语句:
return x >= y;
这一行也是错误的:
int y = (toPeg.get(0)).compareTo(x);
而不是将实际值转换为y
,而是将y
与x
的比较结果存储起来,而不是应该比较的内容再次x
。
此外,您的检查是侵入性的:它会移除钉子顶部的磁盘(从您的代码中可以看出,塔顶部对应于位置零;这是非正统的,但您当然可以使其工作)
在检查挂钩内容不为空后,您应该使用remove(0)
,而不是使用get(0)
。
如果&#34;来自&#34; peg是空的,移动无效。如果&#34;到&#34; peg是空的,此举是有效的。否则,常规比较规则适用(即较大的磁盘不能放在较小的磁盘上)。
public boolean isMoveLegal(int moveFrom, int moveTo){
ArrayList<Integer> toPeg = lists.get(moveTo);
if (toPeg.isEmpty()) return true; // You can move anything on an empty peg
int y = toPeg.get(0).intValue();
ArrayList<Integer> fromPeg = lists.get(moveFrom);
if (fromPeg.isEmpty()) return false; // No disks on the "from" peg
int x = fromPeg.get(0).intValue();
if(x>y){
System.out.println("illegal move");
return false;
}
return true;
}
答案 2 :(得分:1)
public boolean isMoveLegal(int moveFrom, int moveTo){
ArrayList<Integer> fromPeg = lists.get(moveFrom);
if(fromPeg != null && fromPeg.size() > 0) {
int x = fromPeg.get(0).intValue();
ArrayList<Integer> toPeg = lists.get(moveTo);
if(toPeg != null) {
if(toPeg.size() == 0) {
return true;
} else {
int y = toPeg.get(0).intValue();
if(x<y){
return true;
}
}
}
}
System.out.println("illegal move");
return false;
}