您的位置:首页 > 产品设计 > UI/UE

队列Queue模拟排队问题

2016-03-01 10:15 501 查看
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  queue队列