0

これは私が取り組んでいた宿題です。Towers of Hanoi をプレイするための 2 つのクラスを作成しました。1 つ目は、基本的に実際のゲーム クラスを実行するランナーです。

import java.util.Scanner;

class TowersRunner {

    public static void main(String[] args) {
        TowersOfHanoi towers = new TowersOfHanoi();
        towers.TowersOfHanoi()
    }
}

public class TowersOfHanoi {
    public static void main(String[] args) {


        System.out.println("Please enter the starting " + "number of discs to move:");
        Scanner scanner = new Scanner(System.in);
        int num_of_discs = scanner.nextInt();

        solve(num_of_discs, 'A', 'B', 'C');
    }

    public static void solve(int first_disc, char aTower, char bTower, char cTower) {
        if (first_disc == 1) {
            System.out.println("Disk 1 on tower " + aTower + " moving to tower " + cTower);
        } else {
            solve(first_disc - 1, aTower, cTower, bTower);
            System.out.println("Disk " + first_disc + " on tower " + aTower + " moving to tower " + cTower);
            solve(first_disc - 1, bTower, aTower, cTower);
        }
    }
}

私が助けを必要としているのは、TowersOfHanoiクラスを自分のクラスから実行することTowersRunnerです。TowersOfHanoiまた、クラスでゲームが終了するまでにゲームの実行にかかった回数を表示するカウンターも実装する必要があります。基本的に私はある行が必要ですSystem.out.println("It took" + counter + "turns to finish.");

カウンターを正しく実装する方法がわかりません。また、 を実行するランナー クラスを作成することはできませんTowersOfHanoi。クラスはTowersOfHanoiそれ自体で問題なく実行されますが、宿題の要件は、少なくとも 2 つのクラスが必要です。

助けていただければ幸いです!!! 私はJavaの初心者であり、プログラミング全般については、あまり高度にならないようにしてください。:D

4

2 に答える 2

1

TowersOfHanoi クラスに main-Function は必要ありません。代わりに、TowersRunner の main(String args[]) メソッドを

public static void main(String[] args) {    
    System.out.println("Please enter the starting " + "number of discs to move:");
    Scanner scanner = new Scanner(System.in);
    int num_of_discs = scanner.nextInt();
    TowersOfHanoi.solve(num_of_discs, 'A', 'B', 'C');
}
于 2012-04-23T23:48:52.033 に答える
0

関数にカウンターを渡すだけで、インクリメントできます。例えば:

public static void solve(int first_disc, char aTower, char bTower, char cTower, int counter) {
    System.out.println("Currently on turn #" + counter);

    if (first_disc == 1) {
        System.out.println("Disk 1 on tower " + aTower + " moving to tower " + cTower);
    } else {
        solve(first_disc - 1, aTower, cTower, bTower, counter + 1);
        System.out.println("Disk " + first_disc + " on tower " + aTower + " moving to tower " + cTower);
        solve(first_disc - 1, bTower, aTower, cTower, counter + 1);
    }
}

の最初の呼び出しではsolve、1 を渡します。ご覧のとおり、 が再帰的に呼び出されるたびsolveに、カウンターがインクリメントされます。

カウンターの最終値を返すようにこれを適応させるのはあなたに任せます:) 最終値だけが必要な場合は、パラメーターを追加する必要はまったくありません。int代わりに、関数を返すようにvoidして、必要な値を返す方法を見つけてください。

于 2012-04-23T23:29:08.807 に答える