队列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(); } }
相关文章推荐
- C++ STL queue队列
- 基于链表实现Java 自定义Queue队列
- Queue队列容器
- Java基础-Queue队列
- Python queue队列原理与应用案例分析
- Python多线程通信queue队列用法实例分析
- question_002-JAVA之Properties
- 理解ValueStack的基本机制 OGNL表达式
- UIKit框架(19)滚动视图UIScrollView
- iOS开发出现CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
- etry error, curr request is null
- AFNetworking Post 出错 Code=-1011 Request failed: bad request (400)
- 【LeetCode】003 Unique Paths 唯一路线
- NSMutableURLRequest post提交参数
- Java StringBuffer和StringBuilder类
- UIKit框架(18)UIButton和UITextField
- IOS多个UIImageView加载高清大图时内存管理
- Easyui---Tooltip( 提示框)
- R12: How to add Microsoft Excel as Type to the Create Template List of Values in BI Publisher (Doc ID 1343225.1)
- Android UI开发详解之ActionBar