【问题标题】:Integer constants as strings?整数常量作为字符串?
【发布时间】:2016-07-29 22:25:17
【问题描述】:

这个类的要求如下:

编写一个名为 Elevator 的类,该类应包含以下成员变量:

  • currentFloor (int)
  • elevatorState(一个 int 常量,IDLE、TO_SOURCE 或 TO_DESTINATION)
  • request(请求对象表示正在处理的请求,如果电梯空闲,则为 null)

您还应该为此类提供以下内容:

request 设置为nullelevatorState 设置为IDLE 并将currentFloor 设置为1 的默认构造函数。
每个变量的访问器和修改器方法。 代表 IDLE、TO_SOURCE 和 TO_DESTINATION 的最终变量。

这是我所拥有的:

public class Elevator {
    private int currentFloor;
    private int elevatorState;
    private Elevator request;

    public Elevator(){
        currentFloor = 1; 
        elevatorState = ; //this is my problem
        request = null;
    }
}

我很困惑,因为它说将 IDLE、TO_Source 和 TO_DESTINATION 声明为整数常量,但它们不是字符串吗?

任何澄清都会非常有帮助。

【问题讨论】:

  • 它们的价值并不重要。这只是区分不同状态的一种方式。基本上与enum 相同(这实际上是这里的正确工具)。理论上,您可以使用任何数据类型,只要可以唯一标识这三个值中的每一个。
  • 这听起来像是实际使用 Enum 作为电梯状态的最佳时机。
  • 那些不是字符串。它们是您在其他地方定义的常量,例如final int IDLE = 1 或其他。
  • @DrewKennedy 是!但不幸的是,学校(甚至大学)教授 Java 的方式永远无法通过专业的代码审查
  • 对于分配给您这项任务的人来说,这更像是一个问题,因为他们的措辞不清楚。这可能意味着如上所述的枚举,或状态的常量 id。你应该让他们澄清他们想要什么。

标签: java constructor constants final


【解决方案1】:

基本上,要求的是 3 个 int 常量:

public static final int IDLE = 0;
public static final int TO_SOURCE = 1;
public static final int TO_DESTINATION = 2;

public Elevator(){
    currentFloor = 1; 
    elevatorState = IDLE; //this is no longer my problem
    request = null;
}

但是,如果你想成为一个花哨的裤子先生并正确地使用 OOP(可能不会教的东西),你可以使用 Enum!

public enum ElevatorState {
    IDLE, TO_SOURCE, TO_DESTINATION
}

然后在你的课堂上:

public class Elevator {
    private ElevatorState elevatorState;
    private int currentFloor;
    private Elevator request;

    public Elevator() {
        currentFloor = 1;
        elevatorState = ElevatorState.IDLE; //this is no longer my problem
        request = null;
    }
}

我的 Java 有点生锈了,不过应该没问题。

【讨论】:

  • “这不再是我的问题” +1。实际上,+1 用于建议枚举,那么这是否使它成为 +2?
  • @Andreas 使它成为 10,因为这听起来更好,并且在二进制中仍然是 2。为大家赢得胜利。 :)
  • Drew,每个枚举都是一个对象,一个保证唯一的枚举类实例。不过,它们确实有一个序数位置。
  • @Andreas Gah,在 .NET 中它是底层的整数。我会删除那个位 - 感谢您的更正!
【解决方案2】:

这里有一个可能的解决方案:

public class Elevator 
{
    private static final int IDLE = 0;
    private static final int TO_SOURCE = 1;
    private static final int TO_DESTINATION = 2;

    private int currentFloor;
    private int elevatorState;
    private Elevator request;

    public Elevator(){
        currentFloor = 1; 
        elevatorState = IDLE; //this is my problem
        request = null;
    }

    public int getCurrentFloor() {
        return currentFloor;
    }

    public void setCurrentFloor(int currentFloor) {
        this.currentFloor = currentFloor;
    }

    public int getElevatorState() {
        return elevatorState;
    }

    public void setElevatorState(int elevatorState) {
        if( elevatorState == IDLE ) setRequest( null );
        this.elevatorState = elevatorState;
    }

    public Elevator getRequest() {
        return request;
    }

    public void setRequest(Elevator request) {
        this.request = request;
    }


}

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 2014-05-05
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多