Java 只接受特定范围值的变量

Java variable that only accept a specific range of values

我是新手,所以请多多包涵。我有作业,我不太明白老师的意思。

The class name is Elevator

level stores the current level. level is an instance-variable of type int

Limit the number of levels from -2 to 10.

Then create a method called goTo(Level: int).(will send messages)

通过限制在特定范围内,我猜他的意思是使用 if 语句?如果我是对的,我会在下面的方法中添加它,因为我无法直接在 class.

中创建 if 语句

还有为什么方法 where(): int 应该达到 return 级别。它从未被使用过...

public class Elevator {

    int level = 0;

    public void goTo(int level){

        if (level < this.level){
            System.out.println("Elevator going up to floor " + level);
        }
        else if (level > this.level){
            System.out.println("Elevator going  down to floor " + level);
        }
        else if (level == this.level){
            System.out.println("Elevator already on the floor " + level);
        }

    }

    public int where(){
        return level;
    }
}

从我的角度来看,limit 应该是 goTo 方法中的一个 if 语句,以防止发送不同于 -2 到 10 的级别。所以它应该看起来像这样:

public class Elevator {

    int actualLevel = 0;

    public void goTo(int level) {
        if (level < -2 || level > 10) {
            System.out.println("Invalid level!. Levels range is -2 to 10.");
            return;
        }

        if (level > actualLevel) {
            System.out.println("Elevator going up to floor " + level);
            this.actualLevel = level;
        } else if (level < actualLevel) {
            System.out.println("Elevator going  down to floor " + level);
            this.actualLevel = level;
        } else if (level == actualLevel) {
            System.out.println("Elevator already on the floor " + level);
        }
    }

    public int where() {
        return this.actualLevel;
    }

}

我还更改了您的 class 变量名称,因为在检查电梯是否上升或下降时出现错误,因为您弄错了方法和 class 变量。还有一件事,如果电梯上升或下降,你应该将它分配给你的 class 变量来保存实际楼层。

补充一点:

Limit the number of levels from -2 to 10.

这里的真正的问题不是您需要一系列if/else语句。它实际上是(遗漏的)细节:如何对错误的输入做出反应。在您的情况下,您可能觉得:goTo() 方法在提供错误数字时 什么都不做

然而,在更复杂的情况下,以某种方式 告诉该方法的调用者可能更合适:您对我的输入无效。例如通过抛出某种异常。

回到那个简单的例子,您的代码中缺少的是:当用户选择 有效 新关卡时,您希望该分配发生:

if(newLevel < - 2 || newLevel > 10 ) {
... // checks for valid input
if (newLevel < newLevel) {
... // the required print statements

// finally, make the elevator actually go to the new level
level = newLevel;

(是的:与 class 字段相比,更愿意将该参数命名为 不同 。该参数实际上是:要移动到的预期新级别。不同名字有助于避免错误)

首先,您在本地 level 和电梯层之间有一个小的混淆。

现在最低和最高等级是电梯的属性。您也可以将它们存储为(常量)字段。 下面我直接在代码中使用它们。不难理解的是,房子只有那几层

public class Elevator {

    int cabinLevel = 0;

    public void goTo(int level) {
        if (level < -2) {
            return;
        }
        if (level Y > 12) {
            return;
        }

        if (level < this.cabinLevel){
            System.out.println("Elevator going D O W N to floor " + level);
            cabinLevel = level;
        } else if (...) {