队列Queue模拟排队问题

来源:互联网 发布:如何网上开淘宝店铺 编辑:程序博客网 时间:2024/05/18 10:20

4.5 队列通用于模拟人、汽车、飞机、业务等等的流动情况。应用queue.java 程序(清单4.4)的Queue类,编写一个程序模拟超市的收款队列。可以用上机 作业4.1的display()方法,显示出顾客的几条队列。可以通过敲击一个键插入 一个新的顾客。为顾客选择在哪一个队列上。收银员为每个顾客服务的时间是 随机的(可假定为按照顾客买了多少东西而定)。一旦结完账,就从队列中删 除该顾客。为了简单起见,通过敲击键模拟时间的流逝。可能每点击一下键表示时间过去了1分钟。(当然,java有更复杂的方式来处理时间。)


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()<queue[min].size()){                min =i;            }        }        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();    }}
1 0