【问题标题】:Java variable that only accept a specific range of values仅接受特定范围值的 Java 变量
【发布时间】:2020-01-12 07:19:36
【问题描述】:

我是新手,请多多包涵。我有作业,我真的不明白老师到底是什么意思。

类名是电梯

level 存储当前级别。 level 是 int 类型的实例变量

将级别数限制在 -2 到 10 之间。

然后创建一个名为 goTo(Level: int).(将发送消息)的方法

通过限制到特定范围,我猜他的意思是使用 if 语句?如果我是对的,我是否将其添加到下面的方法中,因为我无法直接在类中创建 if 语句。

还有为什么 where(): int 方法应该返回级别。从来没用过……

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;
    }
}

【问题讨论】:

  • 是的,您应该在方法goTo()where() 中添加if 语句,仅用于教您有关getter 的知识。不用太担心。

标签: java instance-variables instance-methods


【解决方案1】:

从我的角度来看,限制应该是 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;
    }

}

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

【讨论】:

    【解决方案2】:

    一点补充:

    将级别数限制在 -2 到 10 之间。

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

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

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

    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;
    

    (是的:更喜欢将该参数命名为不同于而不是类字段。该参数实际上是:要移动到的预期新级别。不同的名称有助于避免错误)

    【讨论】:

      【解决方案3】:

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

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

      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 (...) {
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-01
        • 1970-01-01
        • 2010-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多