首页 > 解决方案 > “set”方法中的“if”条件不起作用

问题描述

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

根据我对 Java 的初学者知识,我认为在 set-method 中放置“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上的布尔值。

标签: javaclassoopobject

解决方案


您永远不会调用该validFloor()方法,因此 的值validFloor永远不会改变。此外,您的代码永远不会在任何地方设置为true ,validFloor因此调用.validFloor()validFloorfalsefalse

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

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变量。我们可以在每次需要时检查一个楼层是否有效,而无需保存结果。


推荐阅读