題目:就診模擬排隊叫號
題意:
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();
}
}
}
歡迎正在學習的同學一起交流891507813