【发布时间】:2015-04-04 21:32:23
【问题描述】:
我正在做一个河内塔程序 - 在 1 号钉子上有 3 个钉子和一堆圆盘,按从大到小的顺序排列(底部最大,顶部最小)。您现在要做的是将所有磁盘从 peg 1 移动到 peg 3,您可以将 peg 2 用作其他磁盘的存储空间。到目前为止,我已经正确放置了磁盘(每个磁盘都被正确移动),现在我需要创建一个计数器变量,以显示用户输入的特定数量的磁盘需要多少次移动。例如,3 个圆盘至少需要 7 步。
https://www.mathsisfun.com/games/towerofhanoi.html
你可以看到我已经注释掉了一些 Moves++,但是无论我把计数器放在哪里,它似乎都不起作用。
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
【问题讨论】:
-
你试过调试了吗?
-
它并没有太大帮助,只是知道将柜台变量放在哪里
-
有3个磁盘[D1,D2,D2],开始时D1在最上面,D1每2次移动,D2每4次移动,D3每8次移动......加减1。你需要2^3-1 移动 3 个磁盘。如果你能计算,为什么要计算?对于 N 个磁盘,您需要 2^N-1 次移动。
-
请向我们展示预期和实际输出的示例。
-
我运行你的程序,如果你选择 3 作为数字,它有 7 个输出。所以到目前为止的最终移动数应该是7。?
标签: java counter joptionpane towers-of-hanoi