我正在做一個河內塔計劃 - 有3個掛鉤和一堆掛在掛鉤1上的磁盤,順序從最大到最小(最大的在底部,最小的在頂部)。你現在要做的是將所有磁盤從掛鉤1移到掛鉤3,可以使用掛鉤2作爲其他磁盤的存儲空間。到目前爲止,我已經獲得了正確放置磁盤的工作(每個磁盤都正確移動),現在我需要按順序創建一個計數器變量,以顯示用戶輸入的特定數量的磁盤需要多少移動。例如,3張光盤最少需要7次移動。河內塔計劃 - 計數器
https://www.mathsisfun.com/games/towerofhanoi.html
你可以看到,我有些註釋掉一些動作++,但是無論我放在櫃檯它似乎永遠不會工作。
public class TowerOfHanoi
{//open class
public void Answer(int numOfDisks, String Peg1, String Peg2, String Peg3, int Moves)
{//open public void Answer
Moves++;
if (numOfDisks == 1)
{//open if
//Moves++;
System.out.println("\nNumber of Moves so far: " + Moves + "\nMove disk on Peg " + Peg1 + " to Peg " + Peg3);
}//close if
else
{//open else
//Moves++;
Answer(numOfDisks - 1, Peg1, Peg3, Peg2, Moves);
System.out.println("\nNumber of Moves so far: " + Moves + "\nMove disk on Peg " + Peg1 + " to Peg " + Peg3);
//Moves++;
Answer(numOfDisks - 1, Peg2, Peg1, Peg3, Moves);
}//close else
}//close public void Answer
public static void main (String[]args)
{//open main
TowerOfHanoi TOH = new TowerOfHanoi();
String numOfDisks = JOptionPane.showInputDialog(null, "Enter a number!");
int NumberOfDisks = Integer.parseInt(numOfDisks);
System.out.println("\nNumber of disks chosen: " + NumberOfDisks);
int Moves = 0;
TOH.Answer(NumberOfDisks, "1", "2", "3", Moves);
}//close main
}//close TowerOfHanoi class
你試過調試呢? – d3dave 2015-04-04 21:35:44
它確實沒有多大幫助,只是想知道櫃檯放在哪裏可以用 – Nick 2015-04-04 21:38:09
用3個磁盤[D1,D2,D2],以D1開始時最頂端,D1每隔一次D1移動一次,D3每隔D3一次D3每8次... plusminus 1.你需要2^3-1的移動3個磁盤。爲什麼數數如果你可以計算?對於N個磁盤,您需要2^N-1個移動。 – BitTickler 2015-04-04 21:41:27