0

我在制作这个方法时遇到了一些麻烦,我认为我做得对,但显然我不是,我正在研究我的 changeLight() 方法,但我的 if 语句出现了红线,我我不知道为什么。该方法应该查看 currentState 并更改它,如果 currentState 是 State.GO 那么它应该更改为 State.WARN,如果 currentState 是 State.Warn 那么它应该更改为 State.STOP,如果当前状态是 State。 STOP 然后它应该更改为 State.GO。这只是一个简单的红绿灯程序。

这里需要一点帮助,不胜感激,谢谢。

这是我的代码。

package trafficlight;

import java.awt.Color;

public class TrafficLight {
  private int goDuration;
  private int stopDuration;
  private int warnDuration;
  public enum State {STOP, GO, WARN};
  public Color GO_COLOR = Color.green;
  public Color STOP_COLOR = Color.red;
  public Color OFF_COLOR = Color.darkGray;
  public Color WARNING_COLOR = Color.yellow;
  private State currentState;

  public static void main(String[] args) {

  }

  public TrafficLight(int goDuration, int stopDuration, int warnDuration) {
    this.goDuration = goDuration = 2;
    this.stopDuration = stopDuration = 2;
    this.warnDuration = warnDuration = 1;
    this.currentState = currentState = State.GO;
  }

  public static void changeLight() {
    if (currentState = State.GO) {
      currentState = State.WARN;
    }
  }

  public int getGoDuration() {
    return goDuration;
  }

  public void setGoDuration(int goDuration) {
    this.goDuration = goDuration;
  }

  public int getStopDuration() {
    return stopDuration;
  }

  public void setStopDuration(int stopDuration) {
    this.stopDuration = stopDuration;
  }

  public int getWarnDuration() {
    return warnDuration;
  }

  public void setWarnDuration(int warnDuration) {
    this.warnDuration = warnDuration;
  }

  public State getCurrentState() {
    return currentState;
  }

  public void setCurrentState(State currentState) {
    this.currentState = currentState;
  }
}
4

4 回答 4

1

=在 if 语句中使用。这就是赋值运算符。你想用==which 是相等运算符。

你得到“红线”的原因是因为你说currentState应该变成State.GO当你要问的时候,“currentState等于State.GO?”


这只是众多错误之一。另一个错误是这样的:

public static void changeLight();

你不应该在那里有分号。您想将后面的代码用大括号括起来,以表示“这是我的方法的代码”。


当你修复它时,你应该有:

public static void changeLight() {
    if(currentState == State.GO){
        currentState = State.WARN;


    }
}

但这将是一个错误,因为此方法是静态的,currentState而不是静态变量。您可以通过将签名更改为:

    public void changeLight()
于 2013-11-13T19:06:52.033 回答
0

检查你的语法。

public static void changeLight(){
  if(currentState == State.GO){
      currentState = State.WARN;
  }
}

编辑:当然 == 而不是 =

于 2013-11-13T19:07:01.993 回答
0
if(currentState == State.go){
    currentState = State.WARN;
}

= 是赋值,但 == 是等价测试。你所做的是说 currentState 现在等于 State.go (currentState = State.go) 你想要的是 currentState 等于 State.go (currentState == State.go)

于 2013-11-13T19:07:16.247 回答
0

我建议将您的枚举用作这样的有限状态机

 public enum State {
   STOP, GO, WARN;
   public Color getColor() {
    switch (this) {
    case GO: // Green 
      return Color.green;
    case WARN:
      return Color.yellow;
    }
    // I don't think you want a State for OFF.
    return Color.red; // Red
  }

   State nextLight() {
    switch (this) {
    case GO: // Green -> Yellow
      return WARN;
    case STOP: // Red -> Green
      return GO;
    }
    return STOP; // Default to Red (Yellow -> Red)
  }

 // The enum is now a FSM.
 public void changeLight(){
   currentState = currentState.nextLight();
 }
于 2013-11-13T19:08:35.353 回答