2012-04-26 10 views
3

おはようございます。皆さん、おはようございます。ハノイのJava再帰のタワー

私のクラスは再帰についてやりがいのある宿題です。アイデアは、私たちがこのハノイプログラムの塔を持っていることです。数字5-25を表示するテーブルを作成するメインと、そのサイズの塔を解決するために必要な移動数

5 ---- 31移動

6 ---- 63を移動

等...

私はTowersOfHanoiクラスが設定されているようことをやってトラブルの少しを持っていますそれぞれの動きを印刷するためにアップして、私はそれを取り除くはずだとは思わないが、私はあまり確かではない。ここで

がTowersOfHanoiクラスは

public class TowersOfHanoi { 
    private int totalDisks; 
    private int count; 

    public TowersOfHanoi(int disks) { 
     totalDisks = disks; 
     count = 0; 
    } 

    public void solve() { 
     moveTower (totalDisks,1,3,2); 
    } 

    private void moveTower(int numDisks, int start, int end, int temp) { 
     if (numDisks ==1) { 
      moveOneDisk(start,end); 
     } 
     else { 
      moveTower (numDisks-1, start, temp, end); 
      moveOneDisk (start, end); 
      moveTower (numDisks-1, temp, end, start); 
     } 
    } 

    private void moveOneDisk(int start, int end) { 
     count = count+1; 
     System.out.println("Move one disk from "+start+" to "+end+" - Move "+count); 
    } 
} 

ある今、私はちょうどすべての単一のタワーの一つ一つの動きをプリントアウトすることなく、そのテーブルを作成することをメインに記述する必要がありますが、私はどのように本当にわかりません。どんな助けもありがとうございます

+2

あなたが宿題として投票されている理由が分からないのは、あなたがそうでないような解決策を求めていない限りです。 @Ademibanはそうだけど、このサイトは、プログラミングに関する質問でランダムな見知らぬ人を支援するための時間をボランティアしている人でいっぱいです。彼らが尋ねるのは、あなたにとって最も役立つ答えをチェックすることです。 :) –

+0

私はdownvoterではありません。 – shift66

+1

スペンサー - これは実際に役立ち建設的でした。私はここに新しいです、そして、物事がまだどのように働くかをかなり理解していないので、ありがとうございます。 – salxander

答えて

2

パズルを解決する各ディスクには、TowersOfHanoiクラスのオブジェクトが1つ必要です。このためには、異なる引数(5〜25)を渡して、mainメソッドでこれらのオブジェクトを作成します。オブジェクトが構築されたら、solveメソッドを呼び出すだけです。

タグ付けされた宿題であるため、実装をあなたに任せます。

+0

私は実際にTowersOfHanoi 5-25を渡すforループでこれを試してみましたが、それぞれの上でsolve()を実行するよりも、この問題は、私が試しているすべてのタワーのそれぞれの移動をそれぞれ出力するということです私はそのタワーを解決するために必要な動きの数が欲しいので、避けるために – salxander

0

moveOneDiskでprintステートメントを削除すると、mainで再帰メソッドを呼び出した後にcountを出力するprintステートメントを呼び出した後に、

private void moveOneDisk(int start, int end) { 
    count = count+1; 
    //System.out.println("Move one disk from "+start+" to "+end+" - Move "+count); 
} 

public static void main(){ 
TowersOfHanoi tower = TowersOfHanoi(5); 
tower.solve(); 
system.out.print(tower.count); 
}//end of main 

moveOneDiskのprintステートメントを削除すると、1回の移動がすべて報告されるわけではありませんが、カウントは増加するようになります。テーブルを作成する際に必要な変数をクラスメンバー数で割り当てることができます。この場合、tower.count

0

パッケージmidterm;

public class TowersofHanoi { 
    public int totalDisks; 
    public static int count; 

    public TowersofHanoi(int disks) { 
     totalDisks = disks; 
     count = 0; 
    } 

    public void solve() { 
     moveTower (totalDisks,1,3,2); 
    } 

    private void moveTower(int numDisks, int start, int end, int temp) { 
     if (numDisks ==1) { 
      moveOneDisk(start,end); 


     } 
     else { 
      moveTower (numDisks-1, start, temp, end); 

      moveOneDisk (start, end); 
      moveTower (numDisks-1, temp, end, start); 
     } 
    } 

    private void moveOneDisk(int start, int end) { 
     count = count+1; 
     //System.out.println("Move one disk from "+start+" to "+end+" - Move "+count); 
    } 
    public static void main(){ 
     TowersofHanoi tower = new TowersofHanoi(5); 
     tower.solve(); 

     System.out.println(tower.count); 
     } 

} 
+0

あなたのコードと共にいくつかの説明を投稿するべきです。 – hotzst