第七週作業 使用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();
		}
	}
}

                                歡迎正在學習的同學一起交流891507813
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章