2016-07-29 22 views
-2

Die Anforderungen für diese Klasse ist wie folgt:Integer-Konstanten als Strings?

eine Klasse schreiben Aufzug genannt, die die folgenden Membervariablen enthalten:

  • currentFloor (int)
  • elevatorState (int Konstante, entweder IDLE, TO_SOURCE oder TO_DESTINATION)
  • Anfrage (Anfrage Objekt, das die Anfrage behandelt oder Null, wenn der Aufzug im Leerlauf ist)

Sie sollten auch für diese Klasse bieten die folgenden:

ein Default-Konstruktor, der für jede Variable request zu null, elevatorState zu IDLE und currentFloor bis 1.
Accessor und Mutator-Methoden setzt. Endgültige Variablen zur Darstellung von IDLE, TO_SOURCE und TO_DESTINATION.

Heres, was ich habe:

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

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

Im verwirrt, weil es sagt IDLE, TO_Source und TO_DESTINATION als Integer-Konstanten zu erklären, aber sie würden nicht Strings sein?

Jede Klärung wäre sehr hilfreich.

+3

Ihr Wert spielt keine Rolle. Es ist nur eine Möglichkeit, zwischen verschiedenen Zuständen zu unterscheiden. Im Grunde das gleiche wie ein [enum] (https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html) (was eigentlich das richtige Werkzeug ist). Sie können theoretisch jeden Datentyp verwenden, solange jeder der drei Werte eindeutig identifiziert werden kann. – resueman

+4

Das klingt nach der perfekten Zeit, um eine Enum für Ihren Aufzugsstatus zu verwenden. –

+0

das sind keine Zeichenfolgen. Sie sind Konstanten, die Sie woanders definieren, z. 'final int IDLE = 1' oder was auch immer. –

Antwort

3

Im Grunde, was der gefragt wird, ist 3 int Konstanten:

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

Wenn Sie jedoch ein Herr Fancy Pants sein wollen und verwenden OOP richtig (etwas, das nicht gelehrt werden kann), können Sie könnte ein Enum verwenden!

public enum ElevatorState { 
    IDLE, TO_SOURCE, TO_DESTINATION 
} 

Dann in Ihrer Klasse:

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

Mein Java ist ein wenig rostig, aber dies sollte verwenden in Ordnung sein.

+0

*" this ist nicht mehr mein Problem "* +1. Eigentlich +1 für Vorschläge enums, so macht es +2? – Andreas

+0

@Andreas Macht es 10, weil das klingt besser und ist immer noch 2 in binär. Win gewinnen für alle.:) –

+1

Drew, jede enum ist ein * Objekt *, eine garantiert-einzigartige Instanz der enum-Klasse, aber sie haben eine ordinale Position, – Andreas

0

Nun, hier ist eine mögliche Lösung für das Problem:

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


}