河内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.");
我不知道如何正确实现计数器。 另外,不能使跑步者类运行TowersOfHanoi
。 TowersOfHanoi
课程本身运行良好,但作业的要求是我们至少需要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
然后试着弄清楚如何使它返回你想要的值。