2011-10-22 69 views
0

我正在编写一个程序来玩Java的河内游戏塔。我们将使用堆栈来表示塔。我有3个堆栈,其中两个我初始化为空,最后一个填充用户定义数量的光盘。我有一个Hanoi类文件,因此我们可以使用Hanoi构造函数,它接受一个整数并创建一个具有该尺寸的光盘。我很难找出代码,以我的初始化方法将光盘推入堆栈(它们的大小是其位置的镜像,因此光盘1的大小为1等)。任何帮助都将不胜感激。使用堆栈在Java中的河内塔

这里是我河内类光盘构造:

public class Hanoi{ 

private int discSize; //size (radius) of the disc 

public Hanoi(int size){ //creates a disk of the specifed size 
    discSize = size; 
} 

我的初始化方法

public static Stack<Hanoi>[] initialize(int n){ 

    System.out.println("How many discs in the game?"); 
    Scanner sc = new Scanner(System.in); 
    int numDisc = sc.nextInt(); 
    int size = numDisc; 

    Stack<Hanoi>[] tower = new Stack[3]; 
    for (int i = 0; i < 3;i++){ 
     tower[i] = new Stack<Hanoi>(); 
    } 
    } 


    Hanoi.PrintStacks(tower); 
    // System.out.println(hanoi[2].peek()); 
    return tower; 

这应该初始化所有的人都为空。那么我应该根据用户输入为每个磁盘创建一个新的Hanoi对象,并按相反顺序将它们推入堆栈?

+1

首先,这是功课吗?如果是这样,应该标记为“功课”。其次,你正在初始化太多次:第一个循环就足够了。在第二个和第三个,你只是分别覆盖第二,第三个单元格和第三个单元格。 – MaDa

+0

出于好奇,你是否恰好在温莎大学学习?我建议有三个类来模拟问题:河内,Peg和Disk。河内将拥有Pegs A,B和C.每个Peg都会有一堆磁盘。 – erisco

+0

是的,这是作业,谢谢你,我会修复初始化。我应该将第一个塔初始化为包含大小为1-n的光盘的堆栈。 – NU2JAVA

回答

1

那么我应该根据用户输入为每个磁盘创建一个新的河内对象,并将它们按相反的顺序推入堆栈?

是的。

for (int i = numDisc; i > 0; --i) 
    tower[0].push(new Hanoi(i));