“设置”方法中的“如果”条件不起作用

时间:2019-02-16 01:08:35

标签: java class oop object

因此,应该能够读取和更改电梯所在的楼层,但只能在电梯安装所在房屋的允许范围内进行。我试图使“ 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上输入的布尔值。

1 个答案:

答案 0 :(得分:1)

您永远不会调用validFloor()方法,因此validFloor的值不会改变。另外,您的代码永远不会在任何地方将validFloor设置为true,因此即使您调用validFloor()也没关系,因为它只能将validFloor设置为false或离开初始值为false

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

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变量。我们只需要检查一次地板是否有效就可以了,而无需保存结果。