如何从数组列表中获取实际的整数值

时间:2014-10-07 00:49:43

标签: java arraylist towers-of-hanoi

我正在使用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;
}

3 个答案:

答案 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,而是将yx的比较结果存储起来,而不是应该比较的内容再次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;
}