簡體   English   中英

Java中的枚舉類型,切換大小寫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM