我正在做一个河内塔计划 - 有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