河内Java塔

这是我正在做的功课。 我创建了两个class来玩河内塔。 第一个是基本上运行实际游戏类的跑步者。

import java.util.Scanner; class TowersRunner { public static void main(String[] args) { TowersOfHanoi towers = new TowersOfHanoi(); towers.TowersOfHanoi() } } public class TowersOfHanoi { public static void main(String[] args) { System.out.println("Please enter the starting " + "number of discs to move:"); Scanner scanner = new Scanner(System.in); int num_of_discs = scanner.nextInt(); solve(num_of_discs, 'A', 'B', 'C'); } public static void solve(int first_disc, char aTower, char bTower, char cTower) { if (first_disc == 1) { System.out.println("Disk 1 on tower " + aTower + " moving to tower " + cTower); } else { solve(first_disc - 1, aTower, cTower, bTower); System.out.println("Disk " + first_disc + " on tower " + aTower + " moving to tower " + cTower); solve(first_disc - 1, bTower, aTower, cTower); } } } 

我需要帮助的是使TowersOfHanoi类从我的TowersRunner类运行。 我还需要实现一个计数器显示游戏在我的TowersOfHanoi课程中完成游戏TowersOfHanoi 。 基本上我需要的是System.out.println("It took" + counter + "turns to finish.");

我不知道如何正确实现计数器。 另外,不能使跑步者类运行TowersOfHanoiTowersOfHanoi课程本身运行良好,但作业的要求是我们至少需要2节课。

帮助将不胜感激!!! 请我是Java和编程的新手一般请不要对我太过先进。 :d

您不需要TowersOfHanoi类中的main-Function。 而是用你的TowersRunner主(String args [])方法替换

 public static void main(String[] args) { System.out.println("Please enter the starting " + "number of discs to move:"); Scanner scanner = new Scanner(System.in); int num_of_discs = scanner.nextInt(); TowersOfHanoi.solve(num_of_discs, 'A', 'B', 'C'); } 

您可以在函数中传递计数器并使其递增。 例如:

 public static void solve(int first_disc, char aTower, char bTower, char cTower, int counter) { System.out.println("Currently on turn #" + counter); if (first_disc == 1) { System.out.println("Disk 1 on tower " + aTower + " moving to tower " + cTower); } else { solve(first_disc - 1, aTower, cTower, bTower, counter + 1); System.out.println("Disk " + first_disc + " on tower " + aTower + " moving to tower " + cTower); solve(first_disc - 1, bTower, aTower, cTower, counter + 1); } } 

在第一次solve ,你会传入1.正如你所看到的,每次solve都是递归调用的,计数器会递增。

我将让你调整它以返回计数器的最终值:)如果你只需要最终值,你根本不需要添加参数。 只需使函数返回int而不是void然后试着弄清楚如何使它返回你想要的值。