【问题标题】:Towers Of Hanoi Java河内爪哇塔
【发布时间】:2012-04-23 23:19:27
【问题描述】:

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

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 类中实现一个计数器显示游戏运行到游戏完成的次数。基本上我需要System.out.println("It took" + counter + "turns to finish.");

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

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

【问题讨论】:

  • 这个网站非常适用于特定问题。这不是一个真正教你如何做一个特定概念的好论坛。您可能希望将其缩小为一两个问题,而不仅仅是一般的“请帮助我”请求。
  • 是的,我注意到了,但是您是否阅读了我上面的问题?我认为我的问题已经足够清楚了。谢谢
  • 我什至没有看到任何问题。我在帖子中搜索了一个?标记但没有找到一个。你能指点我吗?
  • 好的,抱歉我不够清楚。如何在 TowersOfHanoi 类中添加一个计数器来计算完成游戏所需的回合数?

标签: java towers-of-hanoi


【解决方案1】:

您不需要 TowersOfHanoi 类中的 main-Function。 相反,将您的 TowersRunner main(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');
}

【讨论】:

  • 太棒了!谢谢您的帮助。在这个网站上我该如何感谢你?
  • 您投票赞成答案并单击下面的复选标记。它会变成绿色,然后我的答案将被标记为已接受:)
【解决方案2】:

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

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,计数器都会递增。

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

【讨论】:

    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2014-02-18
    • 2011-04-06
    • 2018-05-29
    相关资源
    最近更新 更多