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

Java 如何从数组列表中获取实际整数值,java,arraylist,towers-of-hanoi,Java,Arraylist,Towers Of Hanoi,我正在使用ArrayList的ArrayList作为数据结构来玩一个关于河内塔的游戏。游戏的构造和初始化如下: private ArrayList<ArrayList> lists = new ArrayList<ArrayList>(); private ArrayList<Integer> peg1 = new ArrayList<Integer>(); private ArrayList<Integer> peg2 = new A

我正在使用ArrayList的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;
    }
}
return x >= y;
private ArrayList list=new ArrayList();
private ArrayList peg1=新的ArrayList();
private ArrayList peg2=新的ArrayList();
private ArrayList peg3=新的ArrayList();
//建造师
哈尼公共塔楼(){
列表。添加(空);
添加(peg1);
添加(peg2);
添加(peg3);
}
公共数组列表初始值设定名称(int n){
对于(int i=0;i
我正在尝试使用布尔方法进行检查,确保用户不会尝试将较大的光盘移动到较小的光盘上,但是,我不明白如何获取存储在arrayList中的整数值。整数值应作为测量圆盘直径的一种方法。也就是说,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;
}
public boolean isMoveLegal(int-moveFrom,int-moveTo){
ArrayList fromPeg=lists.get(moveFrom);
intx=(fromPeg.remove(0)).intValue();
ArrayList toPeg=lists.get(moveTo);
int y=(toPeg.get(0))。与(x)比较;
如果(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.

if(x>y){/代码的问题是
isMoveLegal
没有返回
true
的路径:唯一的返回语句返回
false
。您应该按如下方式更改返回语句:

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;
    }
}
return x >= y;
这句话也错了:

int y = (toPeg.get(0)).compareTo(x);
您存储的不是将实际值输入到
y
,而是将
y
x
的比较结果,您不应该再次与
x
进行比较

此外,您的检查是侵入性的:它删除了PEG顶部的磁盘(从代码中可以明显看出,塔顶对应于零位;这是非正统的,但您肯定可以使其工作)

在检查peg的内容是否为空后,应该使用
get(0)
,而不是使用
remove(0)

如果“from”标记为空,则移动无效。如果“to”标记为空,则移动有效。否则,将应用常规比较规则(即,较大的磁盘不能放在较小的磁盘上)

public boolean isMoveLegal(int-moveFrom,int-moveTo){
ArrayList toPeg=lists.get(moveTo);
if(toPeg.isEmpty())返回true;//可以在空的peg上移动任何内容
inty=toPeg.get(0.intValue();
ArrayList fromPeg=lists.get(moveFrom);
if(fromPeg.isEmpty())返回false;//在“from”标记上没有磁盘
intx=fromPeg.get(0.intValue();
如果(x>y){
System.out.println(“非法移动”);
返回false;
}
返回true;
}
公共布尔值isMoveLegal(int-moveFrom,int-moveTo){
ArrayList fromPeg=lists.get(moveFrom);
if(fromPeg!=null&&fromPeg.size()>0){
intx=fromPeg.get(0.intValue();
ArrayList toPeg=lists.get(moveTo);
if(toPeg!=null){
if(toPeg.size()=0){
返回true;
}否则{
inty=toPeg.get(0.intValue();

如果(xDid)您甚至可以先查看Javadocs?您是否知道您的
isMoveLegal()
方法总是返回false?
remove
get
都返回列表中的值,而不是索引。正如答案所示,您没有将
y
设置为列表中的值,因为
compareTo
会弄乱它。另外:(1) 如果您有一个
Integer
,则可以将其分配给
int
,而无需使用
intValue()
(这称为自动取消装箱)。(2)请使用
ArrayList
,而不是
ArrayList
。不应使用没有类型参数(
Integer
)的泛型类型(如
ArrayList
),除非绝对必要。@ajb谢谢!!我看过但不理解语法
ArrayList
我熟悉自动装箱,不知道如何做相反的事情。非常感谢。
int y=(toPeg.size()>0)?toPeg.get(0)。intValue():-1;
真的会抛出这个noobAlso,OP不应该调用remove(),除非光盘确实被移动了。谢谢你的建议。这看起来像是一个很好的语法魔术,但不幸的是它仍然不起作用。我还试着使用
fromPeg.remove(0).intValue()
将其存储在
x
中,并使用
toPeg.get(0).intValue()
将其存储在
y
中也不起作用。假设我只是存储索引的整数值,而不是存储在索引中的实际整数,这是正确的吗?我想这就是我的问题所在。不。你得到的是存储在索引0中的实际整数值。@ScaryWombat。是的。是的。我明白你的意思你说的是.changed
fromPeg.remove(0)
fromPeg.get(0)
并更改了返回语句,但是,它仍然允许我将一个较大的光盘放在一个较小的光盘上。谢谢,这也行得通。我相信
toPeg.size()==0
可以替换为
toPeg.isEmpty()
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;
}