<aside> 🚧 以下內容尚未修改
</aside>
前面的例子假設標準答案只有一個,但如果題目是「請列出一個鹼金屬元素」、「請列出一個鹼土金屬元素」、「請列出一個稀有氣體」,要如何利用程式檢查使用者的答案是否正確? 也就是,標準答案不只一個,而且,只要回答其中一個就好,那要怎麼辦?
function checkAnswer(
q,
answer1,
answer2,
answer3,
answer4,
answer5,
answer6
) {
let myAnswer = prompt(q);
if (
myAnswer == answer1 ||
myAnswer == answer2 ||
myAnswer == answer3 ||
myAnswer == answer4 ||
myAnswer == answer5 ||
myAnswer == answer6
) {
alert("正確");
} else {
alert("錯誤");
}
}
checkAnswer("請列出一個鹼金屬元素", "鋰", "鈉", "鉀", "銣", "銫", "鍅");
checkAnswer("請列出一個鹼土金屬元素", "鈹", "鎂", "鈣", "鍶", "鋇", "鐳");
checkAnswer("請列出一個稀有氣體", "氦", "氖", "氬", "氪", "氙", "氡");
上面這個範例不會有問題,是因為正好這三個題目的答案都是六個,那如果答案不一定是六個呢? 那就需要用到陣列。在javascript裡,可以利用中括號([])來代表一個陣列,這樣,就可以把多個值指定給一個變數。
checkAnswer("請列出一個鹼金屬元素", **[**"鋰", "鈉", "鉀", "銣", "銫", "鍅"**]**);
這會有什麼好處呢? 函數的參數就可以精簡成:
function checkAnswer(q, **answers**) {
}
取得陣列的內容就可以改成:
if (
myAnswer == answers[0] ||
myAnswer == answers[1] ||
myAnswer == answers[2] ||
myAnswer == answers[3] ||
myAnswer == answers[4] ||
myAnswer == answers[5]
) {
alert("正確");
} else {
alert("錯誤");
}
可是,這沒有解決萬一答案個數不一樣的問題。要能夠因應答案個數不一樣,那就要利用陣列的長度 (answers.length),根據長度去檢查每一個元素的內容。要取得陣列裡的資料 ,可以透過中括號裡的值,這個值稱為索引值,索引值從0(而不是1)開始,當我們利用i來做為索引值:
**for (i = 0; i < answers.length; i++){**
if (myAnswer == answers**[i]**){
}
**}**
接下來,怎麼知道輸入的內容跟任何一個答案相同呢? 我們先設定一個變數correct,內容為0,當答案相同時,設定變數內容為1。當迴圈結束時,如果correct的內容是1,就知道輸入的內容跟其中一個答案相同。
function checkAnswer(q, answers) {
let myAnswer = prompt(q);
**let correct = 0;**
for (i = 0; i < answers.length; i++){
if (myAnswer == answers[i]){
**correct =1;**
}
}
if(correct == 1) {
alert("正確");
} else {
alert("錯誤");
}
}
checkAnswer("請列出一個鹼金屬元素", ["鋰", "鈉", "鉀", "銣", "銫", "鍅"]);
checkAnswer("請列出一個鹼土金屬元素", ["鈹", "鎂", "鈣", "鍶", "鋇", "鐳"]);
checkAnswer("請列出一個稀有氣體", ["氦", "氖", "氬", "氪", "氙", "氡"]);
因為這樣的使用情境經常會發生,所以,陣列提供了內建的方法(includes)來處理:
function checkAnswer(q, answers) {
let myAnswer = prompt(q);
if (**answers.includes(myAnswer)**) {
alert("正確");
} else {
alert("錯誤");
}
}
checkAnswer("請列出一個鹼金屬元素", ["鋰", "鈉", "鉀", "銣", "銫", "鍅"]);
checkAnswer("請列出一個鹼土金屬元素", ["鈹", "鎂", "鈣", "鍶", "鋇", "鐳"]);
checkAnswer("請列出一個稀有氣體", ["氦", "氖", "氬", "氪", "氙", "氡"]);