java - 汉诺塔,停止滑动

标签 java recursion towers-of-hanoi

我为汉诺塔问题开发了一个解决方案:

public static void bewege(int h, char quelle, char ablage, char ziel) {  
  if(h > 0){
     bewege(h - 1, quelle, ziel, ablage);
     System.out.println("Move "+ h +" from " + quelle + " to " + ziel);
     bewege(h - 1, ablage, quelle, ziel);
 }
}

效果很好。现在我想限制幻灯片的数量,并在达到一定限制时抛出异常。我用计数器尝试过,但不起作用:

class HanoiNK{

 public static void main(String args[]){
   Integer n = Integer.parseInt(args[0]);
   Integer k = Integer.parseInt(args[1]);

   try{
    bewege(k, n, 'A', 'B', 'C');
   }catch(Exception e){
    System.out.println(e);
   }
 }

 public static void bewege(int c, int h, char quelle, char ablage, char ziel) 
    throws Exception{  
  if(h > 0){
   if(c != 0){
   bewege(c, h - 1, quelle, ziel, ablage);
   c--;
   System.out.println("Move "+ h +" from " + quelle + " to " + ziel);
   bewege(c, h - 1, ablage, quelle, ziel);
   c--;
   }else{ 
    throw new Exception("stop sliding");
   }
  }
 }
}

永远不会抛出异常。有什么想法吗?

更新:结果是 6 张幻灯片,但应该是 5 张 http://ideone.com/lm084

最佳答案

主题:

在我看来,counter 似乎没有在任何地方定义,因此不应编译。

现在您已经编辑了问题来解决上述问题,如果您的第一个参数大于第二个参数,则会抛出异常,例如:

java HanoiNK 5 3

在这种情况下,当c == 0h == 1时会发生异常。

<小时/>

离题:这些行:

Integer n = Integer.parseInt(args[0]);
Integer k = Integer.parseInt(args[1]);

应该是

int n = Integer.parseInt(args[0]);
int k = Integer.parseInt(args[1]);

...因为 parseInt 返回 int (不是 Integer),并且您将它们传递给的函数接受 int(不是整数)。自动装箱可能可以让您逃脱惩罚,但这是没有必要的。

关于java - 汉诺塔,停止滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4570685/

相关文章:

java - 在 Android 中持续检查互联网连接是否可用的有效方法

recursion - 求解形式 p[n,m]==p[n,m-2]+p[n-1,m-1]+p[n-2,m]

algorithm - 分析算法-递归方程(汉诺塔)

c - 了解汉诺塔的递归解决方案

java - Java 中的复活节日期和 UML 方法语法

java - 在类路径中找不到 GWTTestCase

php - 将键值对的 PHP 数组转换为分层嵌套树结构

java - 将此 Quicksort 实现的比较器从 <= 更改为 < 会导致无限递归。为什么?

prolog - 汉诺塔谜题(序言)

java - 带有嵌入式 jetty 服务器的 Spring MVC 资源