队列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
- 队列Queue模拟排队问题
- Team Queue (uva540 队列模拟)
- PAT:银行排队问题:队列
- 第七周排队看病模拟(队列)
- 项目 5 - 排队看病模拟(队列)
- HDU1873 看病要排队【模拟+优先队列】
- HDU-1873 看病要排队(队列模拟)
- 用队列模拟服务台前的排队现象问题_c/c++
- PAT 银行排队问题之单窗口“夹塞”版 (队列+模拟) -- 解题报告
- 4 银行排队问题之单队列多窗口加VIP服务 (30分)----模拟
- 5-41 银行排队问题之单队列多窗口服务<模拟>
- 【PAT1014】 Waiting in Line (30) queue模拟排队
- 统计工龄 模拟EXCEL排序 银行排队问题之单队列多窗口问题 银行业务队列简单模拟 堆栈操作合法性 两个有序序列的中位数
- 模拟window Message Queue 消息队列 算法
- POJ 3125 Printer Queue 模拟队列
- uva 540 Team Queue(队列+模拟)
- uva540 Team Queue(模拟:队列)
- Printer Queue(poj3125模拟队列)
- 【leetcode】【47】Permutations II
- Java 流(Stream)、文件(File)和IO
- Java中Properties类的使用
- Android之RecyclerView简单使用(完结篇)
- Your build settings specify a provisioning profile with the UUID “d5e43854-539d-44a5-a888-992cf0b953
- 队列Queue模拟排队问题
- 【Android】使用VideoView播放视频
- Java-字符串问题
- 学习算法导论——堆排序
- PAT-A1025 PAT Ranking(25)
- sql case when用法
- Object.prototype.toString跨框架判断类型
- Git查看、删除、重命名远程分支和tag
- servlet之response