河内塔,停止滑动

时间:2010-12-31 14:48:00

标签: 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

3 个答案:

答案 0 :(得分:1)

在-话题:

在我看来好像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(不是Integer)的函数。自动拳击可能会让你逃脱它,但这是不必要的。

答案 1 :(得分:1)

我想counter == c?因此,请尝试将c--;移到bewege(c, h - 1, ablage, quelle, ziel);之上,它应该有效,所以看起来像这样:

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

答案 2 :(得分:0)

我不确定counter变量的声明位置(似乎不在这里),但你不会在任何地方递减它,所以它的值永远不会改变。