Java 河内游戏之塔中木桩和圆盘的ArrayList
我正在建立一个河内塔游戏,可以从控制台或命令行玩。注意,这不是一个递归程序;我正在尝试建立一个可以由用户玩的游戏。我使用ArrayList的ArrayList来存储用户选择的PEG(1,2,3)和光盘(N) 我的实例变量和构造函数: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
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;
}