Java 河内游戏之塔中木桩和圆盘的ArrayList

Java 河内游戏之塔中木桩和圆盘的ArrayList,java,arraylist,towers-of-hanoi,Java,Arraylist,Towers Of Hanoi,我正在建立一个河内塔游戏,可以从控制台或命令行玩。注意,这不是一个递归程序;我正在尝试建立一个可以由用户玩的游戏。我使用ArrayList的ArrayList来存储用户选择的PEG(1,2,3)和光盘(N) 我的实例变量和构造函数: private ArrayList lists; private ArrayList peg1 = new ArrayList<>(); private ArrayList peg2 = new ArrayList<>(); private

我正在建立一个河内塔游戏,可以从控制台或命令行玩。注意,这不是一个递归程序;我正在尝试建立一个可以由用户玩的游戏。我使用ArrayList的ArrayList来存储用户选择的PEG(1,2,3)和光盘(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;

}

那么,有谁能帮助我理解如何使用int作为索引来获取适当的peg(int由用户输入)并移动光盘

列表未初始化,因为您声明了类型为
ArrayList

private ArrayList lists;
这是空的。然后,在构造函数中,声明并初始化类型为
ArrayList[]
-的本地对象,就像在ArrayLists数组中一样

ArrayList<Integer>[] lists = new ArrayList[3];
然后退出构造函数,而不对数组执行任何操作。您需要:

private ArrayList[] lists;
private ArrayList peg1 = new ArrayList<>();
private ArrayList peg2 = new ArrayList<>();
private ArrayList peg3 = new ArrayList<>();

//Constructor
public TowersOfHanoi() {

   lists = new ArrayList[3];
   lists[0]= this.peg1;
   lists[1]= this.peg2;
   lists[2]= this.peg3;

}
private ArrayList[]列表;
private ArrayList peg1=新的ArrayList();
private ArrayList peg2=新的ArrayList();
private ArrayList peg3=新的ArrayList();
//建造师
哈尼公共塔楼(){
列表=新的ArrayList[3];
列出[0]=this.peg1;
列出[1]=this.peg2;
列出[2]=this.peg3;
}

private ArrayList list=新的ArrayList(3);
private ArrayList peg1=新的ArrayList();
private ArrayList peg2=新的ArrayList();
private ArrayList peg3=新的ArrayList();
//建造师
哈尼公共塔楼(){
列表.添加(此.peg1);
列表.添加(此.peg2);
列表.add(this.peg3);
}
或者很可能

private ArrayList[] lists = new ArrayList[3];
private ArrayList peg1 = new ArrayList<>();
private ArrayList peg2 = new ArrayList<>();
private ArrayList peg3 = new ArrayList<>();

//Constructor
public TowersOfHanoi() {

   lists[0]= this.peg1;
   lists[1]= this.peg2;
   lists[2]= this.peg3;

}
private ArrayList[]list=new ArrayList[3];
private ArrayList peg1=新的ArrayList();
private ArrayList peg2=新的ArrayList();
private ArrayList peg3=新的ArrayList();
//建造师
哈尼公共塔楼(){
列出[0]=this.peg1;
列出[1]=this.peg2;
列出[2]=this.peg3;
}

您的
列表
数组正在隐藏
列表
字段(顺便说一下,这是一个ArrayList,不是数组)。因此,该字段永远不会被赋值,并将
null
作为默认值。好的,我明白你的意思了,我改为
this.lists=new ArrayList[3]
。但是,我的move方法仍然是错误的,只是不知道如何处理这里的逻辑。但是,当我修复它时,我不能使用
列表。获取
列表。添加
您的第一个和第三个构造函数可以工作,但是,第二个构造函数会出错。我最大的问题是理解move方法中的逻辑。我不知道如何从用户那里获取INT并使用它访问适当的peg。我假设我可以执行类似于
lists[moveFrom].get(0)的操作但我真的不知道该怎么说..对不起,我的前两个示例都有语法错误,但我修复了它们。如果我们假设您使用#3,这是我的建议,那么您将使用
列表[moveFrom].get(peg#u number)
访问一个peg,您可以使用
列表[moveFrom]检查堆栈的大小。size
谢谢,我最后使用了与第2个非常类似的语法。谢谢修理。
lists[0]= this.peg1;
lists[1]= this.peg2;
lists[2]= this.peg3;
private ArrayList[] lists;
private ArrayList peg1 = new ArrayList<>();
private ArrayList peg2 = new ArrayList<>();
private ArrayList peg3 = new ArrayList<>();

//Constructor
public TowersOfHanoi() {

   lists = new ArrayList[3];
   lists[0]= this.peg1;
   lists[1]= this.peg2;
   lists[2]= this.peg3;

}
private ArrayList<ArrayList> lists = new ArrayList<>(3);
private ArrayList peg1 = new ArrayList<>();
private ArrayList peg2 = new ArrayList<>();
private ArrayList peg3 = new ArrayList<>();

//Constructor
public TowersOfHanoi() {

   lists.add(this.peg1);
   lists.add(this.peg2);
   lists.add(this.peg3);

}
private ArrayList[] lists = new ArrayList[3];
private ArrayList peg1 = new ArrayList<>();
private ArrayList peg2 = new ArrayList<>();
private ArrayList peg3 = new ArrayList<>();

//Constructor
public TowersOfHanoi() {

   lists[0]= this.peg1;
   lists[1]= this.peg2;
   lists[2]= this.peg3;

}