我在制作此方法时遇到了一些麻烦,我以为我做对了,但显然我没有,我正在使用changeLight()方法,但是我的if语句出现了一条红线,并且我不确定为什么。该方法应查看currentState并对其进行更改,如果currentState为State.GO,则应将其更改为State.WARN,如果currentState为State.Warn,则应将其更改为State.STOP,如果当前状态为State。停止,然后应更改为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;
  }
}

最佳答案

您在if语句中使用=。那就是赋值运算符。您想使用==,它是相等运算符。

之所以会出现“红线”,是因为当您问“ 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()

08-05 14:50