【问题标题】:The "if" condition in "set" method isn't working“set”方法中的“if”条件不起作用
【发布时间】:2019-02-16 01:08:34
【问题描述】:

所以应该能够读取和更改电梯所在的楼层,但只能在安装电梯的那所房子的允许范围内。我正在尝试让“如果”条件工作以寻找来自方法“validFloor”的布尔真值。

根据我对 Java 的初级知识,我认为在 set 方法中放置“If”条件是一种正确的尝试?

private int currentFloor = 0;
private int numberOfFloors;
private boolean validFloor = false;

public Elevator(int numberOfFloors) {
    this.numberOfFloors = numberOfFloors;
}

//Sets the allowed number of floors (0 to 100)
public void allowedNumberOfFloors() {
    if (numberOfFloors < 2) {
        numberOfFloors = 2;
    } else if (numberOfFloors > 100) {
        numberOfFloors = 100;
    }
}

//Checks validity of the elevator floor in relation to total floors.
public void validFloor() {
    if (currentFloor > numberOfFloors && currentFloor < 0) {
        this.validFloor = false;
    }
}

//Checks whether the specified floor is in reasonable range.
public void setFloor(int currentFloor) {
    if (validFloor) {
        this.currentFloor = currentFloor;
    }
}

public int getFloor() {
    return currentFloor;
}

public String toString() {
    return "Number of floors: " + numberOfFloors + "\nCurrent floor: " + currentFloor;
}

例如,如果您试图在只有 5 层楼的房子中将电梯移至 74 楼,它应该不起作用。我希望嘶嘶声从底层 0 开始,因此类变量“currentFloor”中的 0 值。

“validFloor”方法中的 If 条件似乎根本无法识别。相反,重要的是我放在类变量 validFloor 上的布尔值。

【问题讨论】:

  • 你调用了validFloor()方法,你只是读取了布尔变量。
  • 检查你的逻辑表达式:这可能吗?
  • 为什么会有validFloor的成员以及validFloor的方法?
  • validFloor 方法可能应该带一个参数(要检查的楼层号)。当数字无效时,setter 可能应该抛出一个异常,而不是什么都不做。

标签: java class oop object


【解决方案1】:

你永远不会调用validFloor() 方法,所以validFloor 的值永远不会改变。此外,您的代码永远不会在任何地方将validFloor 设置为true,因此即使您调用validFloor() 也没关系,因为它只能将validFloor 设置为false,或者将其保留为@987654327 的初始值@。

这样做的“正确”方法是:

public boolean isValidFloor(floor) {
  // It seems weird to me that 0 is a valid floor.  Is that correct?
  // If floors are zero-indexed, the top floor should actually be numberOfFloors-1.
  return floor >= 0 && floor <= this.numberOfFloors;
}

public void setFloor(int newFloor) {
    if (isValidFloor(newFloor)) {
        this.currentFloor = newFloor;
    }
}

请注意,甚至不需要保留 validFloor 变量。我们可以在每次需要时检查楼层是否有效,而无需保存结果。

【讨论】:

    猜你喜欢
    • 2015-04-18
    • 1970-01-01
    • 2010-10-21
    • 2018-10-16
    • 2016-11-21
    • 2023-02-06
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多