我为河内塔问题开发了一个解决方案:
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
答案 0 :(得分:1)
在-话题:
在我看来好像 counter
没有在任何地方定义,所以不应该编译。
既然你已经编辑了你的问题来解决上述问题,那么如果你的第一个参数大于你的第二个参数,那么将抛出异常,例如:
java HanoiNK 5 3
在这种情况下,c == 0
和h == 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
变量的声明位置(似乎不在这里),但你不会在任何地方递减它,所以它的值永远不会改变。