[英]Syntax enforcement for Java switch statment to check all known cases of Enum
[英]Enum type in java, switch cases
我需要為交通信號燈編寫迭代方法。 這個想法是,紅色是3分鍾,然后打開綠色,然后是2分鍾,然后打開黃色,然后是1分鍾,然后再次打開紅色。 迭代方法應將狀態機迭代一分鍾。 我了解,應該通過切換案例以某種方式完成此操作,但我無法猜測如何...。請幫助我。
public class TrafficLight
{
private enum State {RED, YELLOW, GREEN};
public void iterate()
{
switch(state)
{
case RED:
break;
case GREEN:
break;
case YELLOW:
break;
}
}
public void setTimeForState(State state, int time)
{
}
}
抱歉,系統刪除了我的文章,還有關於setTimeForState方法的信息,該方法更改了交通燈中特定顏色的等待時間。
您需要在類中定義變量狀態:
class TrafficLight {
enum State {
RED, YELLOW, GREEN
};
State state = State.GREEN;
public void iterate() throws InterruptedException {
switch (this.state) {
case RED:
System.out.println("RED");
Thread.sleep(1000);
this.state = State.GREEN;
break;
case GREEN:
System.out.println("GREEN");
Thread.sleep(1000);
this.state = State.YELLOW;
break;
case YELLOW:
System.out.println("YELLOW");
Thread.sleep(1000);
this.state = State.RED;
break;
}
}
並在每種情況下都將一段時間放置到下一個值的狀態。
public static void main(final String[] args) throws InterruptedException {
final TrafficLight a = new TrafficLight();
while (true) {
a.iterate();
}
}
這是路燈模擬器,它使用計時器和開關:
import java.util.Timer;
import java.util.TimerTask;
public class TrafficLight {
static Timer timer =new Timer();
private enum State {
RED(3l), YELLOW(1l), GREEN(3l);
Long time;
State(Long time) {
this.time = time * 1000 * 60;
}
};
State state= State.RED;
boolean direction = true;
private static class ChangeState extends TimerTask {
public ChangeState(TrafficLight lights) {
this.lights = lights;
}
private final TrafficLight lights;
@Override
public void run() {
switch (lights.state){
case RED:
lights.direction = false;
lights.state = State.YELLOW;
break;
case YELLOW:
if (lights.direction)
lights.state = State.RED;
else
lights.state = State.GREEN;
break;
case GREEN:
lights.direction = true;
lights.state = State.YELLOW;
break;
}
System.out.println(lights.state);
timer.schedule(new ChangeState(lights),1000);// state.time);
}
};
public void run(){
System.out.println("state");
timer.schedule(new ChangeState(this), state.time);
}
public static void main(String[] a) {
(new TrafficLight()).run();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.