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

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(不是Integer)。自动装箱可能会让您摆脱困境,但这不是必需的。

09-03 20:04