1

Javaで基本的なエレベーターシミュレーターを完成させるのに問題があります。私がこれまでに持っているのは、ユーザーがフロアを選択するか、火災警報器を引くか、シミュレーションを終了するかを入力できるオプションです。選択したフロアを選択すると、13を除く1から100までの任意のフロアを選択できます。私が理解できないのは、シミュレーションで現在のフロアを追跡して、下がることができるようにすることです。これは私がこれまでに持っているものです:

public class Elevator {

    public Elevator() {}

    public void selectFloor() {
        Scanner scnr = new Scanner(System.in);
        int newFloor;

        System.out.println("Enter the floor you'd like to go to ==> ");
        newFloor = scnr.nextInt();
        if (newFloor > 100 || newFloor < 0 || newFloor == 13) {
            System.out.println("Invalid selection");
        }

        else if (newFloor <= 100 && newFloor > 0 && newFloor != 13) {
            for (int i = 1; i <= newFloor; i++)
                System.out.println("..." + i);
                System.out.println("Ding!");
        }
    }

    public void fireAlarm() {
        System.out.println("Danger, you must exit the building now!");
    }
}

また、このプログラムのために私の他のクラスを投稿することは役に立ちますか?

4

3 に答える 3

2

次のようなフィールドが必要ですElevatorcurrentFloor

private int currentFloor;

次に、でselectFloor、方向を見つける必要があります。また、ではselectFloor不要else ifです。

public class Elevator {
    private int currentFloor;

    public Elevator() {
        currentFloor = 0;
    }

    public void selectFloor() {
        Scanner scnr = new Scanner(System.in);
        int newFloor;

        System.out.println("Enter the floor you'd like to go to ==> ");
        newFloor = scnr.nextInt();
        if (newFloor > 100 || newFloor < 0 || newFloor == 13) {
            System.out.println("Invalid selection");
        }

        else {  // The if was not necessary
            int direction = 0;
            if(currentFloor < newFloor){
                direction = 1; // going up;
            } else if (currentFloor > newFloor) {
                direction = -1; //going down;
            } else {
                direction = 0; //going nowhere;
            }
            for (; currentFloor != newFloor; currentFloor += newFloor)
                System.out.println("..." + i);
                System.out.println("Ding!");
        }
    }

    public void fireAlarm() {
        System.out.println("Danger, you must exit the building now!");
    }
}

注:これはまだテストしていないため、正しいかどうかはわかりません。

于 2013-03-24T19:27:29.163 に答える
0

クラス開始タグElevatorのすぐ下に追加して、オブジェクトにクラス変数を指定します。private int floor;(Elevatorクラスコンストラクターの上。)この変数は、それを含むElevatorオブジェクトに直接関連付けられます。

そうすれば、を使用してエレベータを作成するときにnew Elevator、床を保持するために常に利用可能なint値も得られます。この値にアクセスするには、getterメソッドとsetterメソッドを作成します。それらは次のようになります。

public void setFloor(int floor) {
    this.floor = floor;
}

public int getFloor() {
    return floor;
}

次に、これら2つのメソッドを呼び出して、フロア番号を設定し、フロア番号を取得できます。追跡するには、selectFloorメソッドでsetFloorを使用し、有効な選択が行われた後にフロア番号を渡す必要があります。次に、getFloorを使用して、上昇するか下降するかを判断できます。

floor新しいElevatorオブジェクトが作成されたときに、コンストラクターに変数を1に設定させるため。コンストラクターを次のように変更するだけです。

public Elevator() {
    setFloor(1);
}

お役に立てれば!それらがどのように機能しているかについて質問がある場合は、私に知らせてください。詳細を提供しようと思います。

于 2013-03-24T19:24:33.013 に答える
0

backToBasement()という新しいメソッドを挿入し、それをselectFloor()メソッドに結び付けました。お役に立てば幸いです。

public void selectFloor() {
        Scanner scnr = new Scanner(System.in);
        int newFloor;

        System.out.println("Enter the floor you'd like to go to ==> ");
        newFloor = scnr.nextInt();
        if (newFloor > 100 || newFloor < 0 || newFloor == 13) {
            System.out.println("Invalid selection");
        }

        else if (newFloor <= 100 && newFloor > 0 && newFloor != 13) {
            for (int i = 1; i <= newFloor; i++)
                System.out.println("..." + i);
                System.out.println("Ding!");
                backToBasement(newFloor);
        }
    }

    public void fireAlarm() {
        System.out.println("Danger, you must exit the building now!");
    }

    public void backToBasement(int newFloor){
        for (int i=newFloor; i>0;i--){
             System.out.println("..." + i);
        }
        System.out.println("Ding!... Back to Ground Level");

    }
于 2013-03-24T19:32:34.913 に答える