我在制作此方法时遇到了一些麻烦,我以为我做对了,但显然我没有,我正在使用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()