2011-10-22 65 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));