第七周作业 使用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();
  }
  }
}
相关文章
|
6月前
|
Java 程序员
ArrayList扩容机制:流程图+源码解析给你整得明明白白
ArrayList的扩容机制是java基础面试题,是每个java程序员学习路上都会遇到的一个问题,也是大多数人第一次看的java源码,今天布狼牙就带大家来看一下源码.
|
6月前
|
安全 Java 开发者
丢失的8小时去哪里了?SimpleDateFormat线程不安全,多线程初始化异常解决方案
丢失的8小时去哪里了?SimpleDateFormat线程不安全,多线程初始化异常解决方案
95 0
|
15天前
|
NoSQL Java 调度
Java调度任务如何保证相同任务在一个周期里只执行一次?
【10月更文挑战第29天】Java调度任务如何保证相同任务在一个周期里只执行一次?
47 6
|
Java 程序员
Stream流操作-结果收集终止方法-最终篇
Stream流操作-结果收集终止方法-最终篇
108 0
|
安全 NoSQL Java
28个案例问题分析---15---登陆之后我加入的课程调用接口报错--ArrayList线程不安全。占用内存情况
28个案例问题分析---15---登陆之后我加入的课程调用接口报错--ArrayList线程不安全。占用内存情况
83 0
|
存储 Java
java 计算多个时间段中重复的天数
工作中遇到这个需求,自己写了一下,测试了几种情况都没有问题。 这里的时间段我是用的map存储的,map里面是一个key为st的开始时间,一个key为et的结束时间。
第十二章队列模拟注意事项
第十二章队列模拟注意事项
57 0
|
存储 安全 算法
《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)
《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)
《我要进大厂》- Java集合夺命连环14问,你能坚持到第几问?(集合概述 | List | Set | Queue)
L2-037 包装机 (25 分)(队列加栈模拟)
L2-037 包装机 (25 分)(队列加栈模拟)
126 0
L2-037 包装机 (25 分)(队列加栈模拟)
|
Java Android开发
JobService源码探究之 onStartJob()里执行耗时逻辑导致Job可能被强制销毁
JobService源码探究之 onStartJob()里执行耗时逻辑导致Job可能被强制销毁