第五章案例 隨機點名器的改進
案例介紹:
隨機點名器,即在全班同學中隨機的打印出一名同學名字。
要做的隨機點名器,它具備以下3個內容:
l 儲存所有同學姓名
l 總覽全班同學姓名
l 隨機點名其中一人,列印到控制檯
案例分析:
在全班同學中隨機的打印出一名同學名字。
我們對本案例進行分析,得出如下分析結果:
1.儲存全班同學名字
2.列印全班同學每一個人的名字
3.在班級總人數範圍內,隨機產生一個隨機數,查詢該隨機數所對應的同學名字
該案例須有以下3個內容:
l 儲存所有同學姓名
l 總覽全班同學姓名
l 隨機點名其中一人,列印到控`制臺
隨機點名器明確地分為了三個功能。如果將多個獨立功能的程式碼寫到一起,則程式碼相對冗長,我們可以針對不同的功能可以將其封裝到一個方法中,將完整獨立的功能分離出來。
而在儲存同學姓名時,如果對每一個同學都定義一個變數進行姓名儲存,則會出現過多孤立的變數,很難一次性將全部資料持有。此時,我們可以使用陣列解決多個數據的儲存問題。
實現程式碼:
public staticvoid main(String[] args) {
System.out.println("--------隨機點名器--------");
// 建立一個儲存多個同學名字的容器(陣列)
String[]students = new String[3];
/*
* 1.儲存全班同學名字
*/
addStudentName(students);
/*
* 2.列印全班同學每一個人的名字
*/
printStudentName(students);
/*
* 3.獲取隨機點名到的學生姓名,並列印
*/
StringrandomName = randomStudentName(students);
System.out.println("被點到名的同學是:" + randomName);
}
l 1.儲存所有同學姓名
/**
* 1.儲存全班同學名字
* 建立一個儲存多個同學名字的容器(陣列)
* 鍵盤輸入每個同學的名字,儲存到容器中(陣列)
*/
publicstaticvoid addStudentName(String[] students) {
//鍵盤輸入多個同學名字儲存到容器中
Scanner sc = new Scanner(System.in);
for (int i = 0; i < students.length; i++){
System.out.println("儲存第"+i+"個名稱:");
students[i] = sc.next();
}
}
上述方法中,通過鍵盤錄入,完成為指定陣列元素賦值。方法定義時,將引數定義為字串陣列,用於接收存放的同學姓名。
l 2.列印全班同學每一個人的名字
/**
* 2列印全班同學每一個人的名字
*/
public staticvoid printStudentName(String[]students) {
//遍歷陣列,得到每個同學名字
for (inti = 0; i < students.length; i++) {
Stringname = students[i];
//列印同學名字
System.out.println("第"+i+"個學生名稱:" + name);
}
}
上述方法中,方法引數students陣列中儲存了所有學生的姓名。通過遍歷將陣列中的每一個元素訪問一遍,得到每一個同學名稱。
l 3.獲取隨機點到的學生姓名
/**
* 3.在班級總人數範圍內,隨機產生一個隨機數,返回隨機數位置上的學生姓名
*/
public staticString randomStudentName(String[] students) {
//根據陣列長度,獲取隨機索引
int index = newRandom().nextInt(students.length);
//通過隨機索引從陣列中獲取名稱
Stringname = students[index];
//返回隨機點到的名稱
return name;
}
上述方法中,通過隨機數類Random產生一個從0到陣列長度的隨機索引。使用該索引獲取students陣列中對應的值,便得到了全班同學的隨機姓名。