0

ハノイの塔の問題の解決策を開発しました。

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

4

3 に答える 3

1

私は思うcounter == cc--;したがって、あなたの上に移動しようとする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");
        }
    }
}
于 2010-12-31T14:52:10.020 に答える
1

トピック:

counterどこにも定義されていないように見えるので、コンパイルしないでください。

上記を修正するために質問を編集したので、最初の引数が 2 番目の引数より大きい場合、例外がスローされます。

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]);

...以来(not ) をparseInt返し、それらを渡す関数は受け入れます(not )。自動ボクシングを使用すると、おそらくそれを回避できますが、不要です。intIntegerintInteger

于 2010-12-31T14:50:37.110 に答える
0

変数がどこでcounter宣言されているかはわかりませんが (ここにはないようです)、どこでもデクリメントしていないため、値は決して変化しません。

于 2010-12-31T14:53:09.850 に答える