대기열Queue 시뮬레이션 대기열 생성 문제

4.5 대열은 사람, 자동차, 비행기, 업무 등의 유동 상황을 모의하는 데 사용된다.queue를 적용합니다.자바 프로그램(명세서 4.4)의Queue 클래스로 슈퍼마켓의 수금 대기열을 모의하는 프로그램을 작성합니다.4.1의 디스플레이 () 방법으로 고객의 몇 개의 대기열을 표시할 수 있습니다.키를 두드려서 새로운 고객을 삽입할 수 있다.고객을 위해 어느 대열에 있는지 선택하세요.수납원이 모든 고객을 위해 서비스하는 시간은 무작위이다.일단 계산이 끝나면 대열에서 이 고객을 삭제한다.간단하게 보기 위해 키를 두드려 시간의 흐름을 시뮬레이션한다.버튼을 한 번 눌렀을 때마다 시간이 1분이 지났음을 나타낼 수 있다.(물론 자바는 시간을 처리하는 더 복잡한 방법이 있다.)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Utility {
    public static String getString() throws IOException{
        InputStreamReader in = new InputStreamReader(System.in);
        BufferedReader bf = new BufferedReader(in);
        String s = bf.readLine();
        return s;
    }
}
import java.io.IOException;


public class SuperMarket {
    //      
    private Queue[] queue = {null,new Queue(20),new Queue(20),new Queue(20),new Queue(20)};
    public void simulate() throws IOException{//    
        long id=0;//    
        boolean flag=true;
        while(flag){
            System.out.println("     :");
            System.out.print("0.         。");
            System.out.print("1.      1   。");
            System.out.print("2.      2   。");
            System.out.print("3.      3   。");
            System.out.print("4.      4   。");
            System.out.println("q.      !");

            String s = Utility.getString();
            if(s.length()==0){
                continue;
            }
            char ch = s.charAt(0);
            switch(ch){
                case '0':
                    id++;
                    insertQueue(id);
                    displayQueue();
                    break;
                case '1':
                    removeQueue(1);
                    displayQueue();
                    break;
                case '2':
                    removeQueue(2);
                    displayQueue();
                    break;
                case '3':
                    removeQueue(3);
                    displayQueue();
                    break;
                case '4':
                    removeQueue(4);
                    displayQueue();
                    break;
                case 'q':
                    flag =false;
                    System.out.println("byebye!");
                    break;
                default:
                    break;
            }
        }
    }

    private void removeQueue(int queueId){
        if(queue[queueId].size()==0){
            return;
        }
        long id = queue[queueId].remove();
        System.out.println("  " + id + "   " + queueId + "   !"); 
    }

    public void insertQueue(long id){
        int queueId = getMinQueueId();
        queue[queueId].insert(id);
        System.out.println("  " + id + "   " + queueId + "   ");
    }

    private int getMinQueueId(){
        int min =1;
        for(int i=2;i<5;i++){
            if(queue[i].size()return min;
    }

    public void displayQueue(){
        for(int i=1;i<5;i++){
            System.out.print(" " + i + " ");
            queue[i].display();
        }
        System.out.println();
    }

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        SuperMarket sm = new SuperMarket();
        sm.simulate();
    }
}

좋은 웹페이지 즐겨찾기