注意事项            
【!注意!】技术指导专用文章,实在不会搭建再点击此处 【!注意!】

Java实现汉诺塔算法

注意事项
🔥 最新推出:一天会员!
专为下载资源打造,超值体验,立即加入!
了解详情
✨ 新推出:兑换码!

进入小程序,获得大额兑换码!最高减100%

小程序二维码

扫码进入小程序

import java.util.Scanner;

public class Hannuota {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入汉诺塔的层数:");
        int num = scanner.nextInt();

        System.out.print("请输入起始柱子的字符表示:");
        char begin = scanner.next().charAt(0);

        System.out.print("请输入目标柱子的字符表示:");
        char end = scanner.next().charAt(0);

        System.out.print("请输入中间柱子的字符表示:");
        char middle = scanner.next().charAt(0);

        new Hannuota().hanoi(num, begin, end, middle);

        scanner.close(); // 关闭Scanner
    }

    private int moveCount = 1;

    public int getMoveCount() {
        return moveCount;
    }

    public void hanoi(int num, char begin, char end, char middle) {
        if (num == 1) {
            //如果层数为1,直接将其移动到目标柱
            System.out.println("第" + moveCount + "次:从" + begin + "移动到" + end);
        } else {
            //把begin上面的num-1层移动到middle
            hanoi(num - 1, begin, middle, end);
            //把begin的那层移动到end
            System.out.println("第" + moveCount + "次:从" + begin + "移动到" + end);
            moveCount++;
            //把middle的num-1层移动到end
            hanoi(num - 1, middle, end, begin);
        }
    }
}

以上就是完整代码!

  1. 导入Scanner类

    java
    import java.util.Scanner;

    这一行导入了Java标准库中的Scanner类,用于接收用户的输入。

  2. Hannuota类的定义

    java
    public class Hannuota {

    这里定义了一个名为Hannuota的Java类。

  3. main方法

    java
    public static void main(String[] args) {

    这是Java程序的入口点,程序从这里开始执行。

  4. 创建Scanner对象

    java
    Scanner scanner = new Scanner(System.in);

    创建了一个Scanner对象,用于接收用户的输入。

  5. 获取汉诺塔层数、起始柱字符、目标柱字符和中间柱字符

    java
    int num = scanner.nextInt();
    char begin = scanner.next().charAt(0);
    char end = scanner.next().charAt(0);
    char middle = scanner.next().charAt(0);

    通过Scanner对象获取用户输入的汉诺塔层数、起始柱字符、目标柱字符和中间柱字符。

  6. 调用hanoi方法解决汉诺塔问题

    java
    new Hannuota().hanoi(num, begin, end, middle);

    创建Hannuota类的实例,并调用其hanoi方法来解决汉诺塔问题。

  7. 关闭Scanner

    java
    scanner.close();

    关闭Scanner对象,释放资源。

  8. moveCount变量和getMoveCount方法

    java
    private int moveCount = 1;

    public int getMoveCount() {
    return moveCount;
    }

    这里定义了一个私有的整型变量moveCount,用于记录移动次数,并提供了一个公共的方法getMoveCount用于获取移动次数。

  9. hanoi方法

    java
    public void hanoi(int num, char begin, char end, char middle) {
    // 如果只有一个盘子,直接从起始柱移动到目标柱
    if (num == 1) {
    System.out.println("第" + moveCount + "次:从" + begin + "移动到" + end);
    } else {
    // 将num-1个盘子从起始柱经过目标柱移动到中间柱
    hanoi(num - 1, begin, middle, end);
    // 将最底下的盘子从起始柱移动到目标柱
    System.out.println("第" + moveCount + "次:从" + begin + "移动到" + end);
    moveCount++;
    // 将num-1个盘子从中间柱经过起始柱移动到目标柱
    hanoi(num - 1, middle, end, begin);
    }
    }

    这是一个递归方法,用于解决汉诺塔问题。当只有一个盘子时,直接从起始柱移动到目标柱;否则,将num-1个盘子从起始柱经过目标柱移动到中间柱,然后将最底下的盘子从起始柱移动到目标柱,最后将num-1个盘子从中间柱经过起始柱移动到目标柱。

这段代码是一个简单而经典的汉诺塔问题的解决方案,展示了递归算法的应用。

© 版权声明
THE END
喜欢就支持一下吧
点赞23 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容