1

我无法用 Java 完成一个基本的电梯模拟器。到目前为止,我有一个选项可以让用户输入他们是想选择楼层、拉火警还是退出模拟。当他们选择选择楼层时,他们可以选择从 1 到 100 的任何楼层,除了 13。我不知道该怎么做是让模拟跟踪他们当前的楼层,以便他们可以下去。这是我到目前为止所拥有的:

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

Elevator应该有一个currentFloor字段,如下所示:

private int currentFloor;

然后,在 中selectFloor,您需要找到方向。此外,在 中selectFloorelse 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 对象。

这样,当您通过使用创建 Elevator 时,new Elevator您也将始终拥有一个 int 值来保持地板。要访问此值,请构建一个 getter 和 setter 方法。它们应该如下所示:

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

public int getFloor() {
    return floor;
}

然后可以调用这两个方法来设置楼层号并获取楼层号。为了跟踪,在您的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 回答