【!注意!】技术指导专用文章,实在不会搭建再点击此处
【!注意!】
✨ 新推出:兑换码!
进入小程序,获得大额兑换码!最高减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);
}
}
}
以上就是完整代码!
-
导入Scanner类:
javaimport java.util.Scanner;
这一行导入了Java标准库中的Scanner类,用于接收用户的输入。
-
Hannuota类的定义:
javapublic class Hannuota {
这里定义了一个名为Hannuota的Java类。
-
main方法:
javapublic static void main(String[] args) {
这是Java程序的入口点,程序从这里开始执行。
-
创建Scanner对象:
javaScanner scanner = new Scanner(System.in);
创建了一个Scanner对象,用于接收用户的输入。
-
获取汉诺塔层数、起始柱字符、目标柱字符和中间柱字符:
javaint num = scanner.nextInt();
char begin = scanner.next().charAt(0);
char end = scanner.next().charAt(0);
char middle = scanner.next().charAt(0);
通过Scanner对象获取用户输入的汉诺塔层数、起始柱字符、目标柱字符和中间柱字符。
-
调用hanoi方法解决汉诺塔问题:
javanew Hannuota().hanoi(num, begin, end, middle);
创建Hannuota类的实例,并调用其hanoi方法来解决汉诺塔问题。
-
关闭Scanner:
javascanner.close();
关闭Scanner对象,释放资源。
-
moveCount变量和getMoveCount方法:
javaprivate int moveCount = 1;
public int getMoveCount() {
return moveCount;
}
这里定义了一个私有的整型变量moveCount,用于记录移动次数,并提供了一个公共的方法getMoveCount用于获取移动次数。
-
hanoi方法:
javapublic 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
暂无评论内容