第七周作业 使用Arraylist类进行模拟队列

简介: 第七周作业 使用Arraylist类进行模拟队列

题目:就诊模拟排队叫号


题意:


1、实验要求
    本实验要求:以医院排队叫号就诊为业务背景,训练Java列表对象(List)的应用场景。
    1-1. 业务说明:
        1-1.1. 本实验以患者到医院就诊为业务背景,患者取号排队,等待叫号。
        1-1.2. 叫号器负责叫号,叫号后移除排队的队首患者,并显示其他候诊人。
   1-2. 创建工程并配置环境:
        1-2.1. 限制1. 创建实验工程,命名为:SE_JAVA_EXP_E039;
        1-2.1. 限制2. 创建包,命名为:cn.campsg.java.experiment;
    1-3. 创建排队叫号器业务类:
        1-3.1. 限制1. 在cn.campsg.java.experiment.包中创建排队叫号器业务类:
                1) 类名:QueueCaller。
        1-3.2. 为QueueCaller类创建私有属性,要求如下:
属性权限
属性名称
属性类型
属性说明
private
queue
ArrayList<String>
患者排队列表
泛型说明:队列中存储的是患者姓名(字符串类型)。
        1-3.3. 为QueueCaller类创建0参构造器:
                1) 在构造器内实例化患者排队列表(queue)。
        1-3.4. 为QueueCaller类创建获取患者数量的方法,要求如下:
访问权限
方法名称
返回值
方法参数
参数说明
public
size
int
方法说明:本方法获得当前正在排队候诊的患者数量。
        1-3.5. size方法的业务逻辑实现要求如下:
                1) 从排队队列queue中获取有效长度。
        1-3.6. 为QueueCaller类创建取号的方法,要求如下:
访问权限
方法名称
返回值
方法参数
参数说明
public
fetchNumber
void
String patient
取号的患者
方法说明:本方法将就诊患者加入到排队队列(queue)中。
        1-3.7. fetchNumber方法的业务逻辑实现要求如下:
                1) 将就诊患者加入到排队队列(queue)中;
                2) 输出患者排队就诊信息,信息如下:
                    患者姓名 + "前面还有 " + 排队人数+ " 位在等候就诊。"
        1-3.8. 为QueueCaller类创建显示候诊患者信息的方法,要求如下:
访问权限
方法名称
返回值
方法参数
参数说明
public
showPatients
void
方法说明:本方法显示所有正在排队的患者姓名。
        1-3.9. showPatients方法的业务逻辑实现要求如下:
                1) 获取排队的所有患者姓名;
                2) 输出每位患者的姓名,信息内容:
                    患者姓名 +  " 候诊中"。
        1-3.10. 为QueueCaller类创建叫号方法,要求如下:
访问权限
方法名称
返回值
方法参数
参数说明
public
callNumber
void
方法说明:按照取号顺序依次叫号。
        1-3.11. callNumber方法的业务逻辑实现要求如下:
                1) 从排队队列(queue)中返回队首患者姓名;
                2) 移除队首患者(表示该患者已经就诊不在排队队列中)。
                3) 输出被叫号的患者信息,信息内容: 
                    "请患者:" + 患者姓名 + " 到诊室就诊!"。
    1-4. 显示模拟叫号就诊情况:
        1-4.1. 限制1. 在cn.campsg.java.experiment包中创建主类:MainClass;
        1-4.2. 为MainClass创建入口主方法:main。
        1-4.3.  模拟3个患者排队就诊:
                1) 在main方法中,创建1个排队叫号器(QueueCaller)对象;
                2) 在main方法中,向叫号器对象存入3个患者姓名;
        1-4.4. 模拟叫号:
                1) 在main方法中,循环叫号直到没有就诊患者为止。
                2) 每次叫号后均需显示正在排队的患者信息。


代码:


`分为一个包两个类
QueueCaller.java
package cn.campsg.java.experiment;
import java.util.*;
public class QueueCaller {
  private ArrayList<String> queue;
  public QueueCaller(){
  //构造函数里创建实例
  queue=new ArrayList<String>();
  }
  //获取容器中现有数量
  public int size(){
  return queue.size();
  }
  //向容器添加String类型的,此时第一个为就诊的,后面为等待就诊的
  public void fetchNumber(String patient){
  queue.add(patient);
  System.out.println(patient+"前面还有"+(size()-1)+"位在等候就诊");
  }
  //这里是查看候诊中的
  public void showPatients(){
  if(queue.size()<=1){
    return;
  }
  else{
    for(int i=1;i<=queue.size()-1;i++)
    System.out.println(queue.get(i)+"候诊中");
  }
  }
  //进行叫号,移除正在就诊的,然后进行呼叫下一个
  public void callNumber(){
  queue.remove(0);
  if(queue.size()!=0)
    System.out.println("请患者:"+queue.get(0)+"到诊室就诊!");
  }
}


注意点:


1.在Arrylist容器中移除一个时,这个位置之后的下标都会往前移一格,同时,统计数量的size()也会自动减少一个的,Arrylist就像是数组

2.这道题中callNumber里在移除一个之后,应当判断是否在容器中还存在,如果不判断例如容器中只剩最后一个移除掉,那么此时容器无内容,此时再通过下标访问那么就出超界。


接在来是MainClass类中:


package cn.campsg.java.experiment;
public class MainClass {
  public static void main(String[] args){
  //创建对象
  QueueCaller qc= new QueueCaller();
  //进行插入数据
  for(int i=1;i<=3;i++){
    qc.fetchNumber("张三-"+i);
  }
  //不断进行叫号并且进行查看等候就诊的人数
  while(qc.size()!=0){
    qc.callNumber();
    qc.showPatients();
  }
  }
}
相关文章
|
1月前
|
缓存 NoSQL Java
java中复杂业务情况下的集合操作(增减集合同步数据)
java中复杂业务情况下的集合操作(增减集合同步数据)
27 0
|
9月前
|
存储 Java
java 计算多个时间段中重复的天数
工作中遇到这个需求,自己写了一下,测试了几种情况都没有问题。 这里的时间段我是用的map存储的,map里面是一个key为st的开始时间,一个key为et的结束时间。
|
11月前
第十二章队列模拟注意事项
第十二章队列模拟注意事项
40 0
|
缓存 网络协议 Java
【Java原理探索】教你如何使用「精巧好用」的DelayQueue(延时队列)
【Java原理探索】教你如何使用「精巧好用」的DelayQueue(延时队列)
135 0
|
SQL Java
某数据日报思路和Java汇总每日每周每月用户数据定时任务+锁
一、某数据日报思路 增加type字段 1.日报核对每一个字段,缺少的就增加 2.改造每个查询sql为查时间段,后面可以重复利用 3。先做月报,新建定时任务,自己百度cron表达式,每月1号凌晨一点执行月报定时任务 4.做周报,新建定时任务,每周一凌晨1点执行 二、Java汇总每日每周每月用户数据定时任务+锁
249 0
|
存储 安全 算法
《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)
《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)
《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)
使用lambda去重、map排序、按任意时间间隔(小时、半小时、分钟)进行结果统计
使用lambda去重、map排序、按任意时间间隔(小时、半小时、分钟)进行结果统计
213 0
使用lambda去重、map排序、按任意时间间隔(小时、半小时、分钟)进行结果统计
|
存储
数组模拟队列(测试样例,含源码分析)
数组模拟队列(测试样例,含源码分析)
94 0
数组模拟队列(测试样例,含源码分析)
L2-037 包装机 (25 分)(队列加栈模拟)
L2-037 包装机 (25 分)(队列加栈模拟)
102 0
L2-037 包装机 (25 分)(队列加栈模拟)
|
存储 Java 调度
用Java写数据结构作业——7-2 任务调度的合理性 (25分)
用Java写数据结构作业——7-2 任务调度的合理性 (25分)