步驟 6:加入減法問題
若要加入減法問題,您需要執行下列動作:
儲存減法的值。
產生問題的隨機數字 (並確定答案介於 0 和 100 之間)。
更新計時器的 Tick 事件處理常式,讓事件處理常式在時間結束時填入正確答案。
若要加入減法問題
首先,您需要位置來儲存值,所以請將減法問題的兩個 int (Integer) 加入至表單。 新的程式碼會出現在加法整數和計時器整數之間。 程式碼看起來應該如下所示。
Public Class Form1 ' Create a Random object to generate random numbers. Private randomizer As New Random ' These Integers will store the numbers ' for the addition problem. Private addend1 As Integer Private addend2 As Integer ' These Integers will store the numbers ' for the subtraction problem. Private minuend As Integer Private subtrahend As Integer ' This Integer will keep track of the time left. Private timeLeft As Integer
public partial class Form1 : Form { // Create a Random object to generate random numbers. Random randomizer = new Random(); // These ints will store the numbers // for the addition problem. int addend1; int addend2; // These ints will store the numbers // for the subtraction problem. int minuend; int subtrahend; // This int will keep track of the time left. int timeLeft;
注意事項 新的字串序列名稱--minuend 和 subtrahend— 不程式設計條款。它們是算術中的減數 (subtrahend) 和被減數 (minuend) 的慣用名稱。差等於被減數減去減數。您可以使用其他名稱,因為您程式中的 int、控制項、元件或方法不需要特定名稱。有一些規則 (例如,名稱開頭不能是數字),但一般而言,您可以使用 x1、x2、x3、x4 等名稱。但這樣程式碼就不易閱讀,甚至幾乎無法追蹤問題。稍後在本教學課程中,您在乘法 (被乘數 × 乘數 = 乘積) 和除法 (被除數 ÷ 除數 = 商數) 中會使用慣用的名稱。
接下來,修改 StartTheQuiz() 方法來填入隨機減法問題。 新的程式碼接在 "Fill in the subtraction problem" 註解後面。 程式碼看起來應該如下所示。
''' <summary> ''' Start the quiz by filling in all of the problems ''' and starting the timer. ''' </summary> ''' <remarks></remarks> Public Sub StartTheQuiz() ' Fill in the addition problem. addend1 = randomizer.Next(51) addend2 = randomizer.Next(51) plusLeftLabel.Text = addend1.ToString() plusRightLabel.Text = addend2.ToString() sum.Value = 0 ' Fill in the subtraction problem. minuend = randomizer.Next(1, 101) subtrahend = randomizer.Next(1, minuend) minusLeftLabel.Text = minuend.ToString() minusRightLabel.Text = subtrahend.ToString() difference.Value = 0 ' Start the timer. timeLeft = 30 timeLabel.Text = "30 seconds" Timer1.Start() End Sub
/// <summary> /// Start the quiz by filling in all of the problems /// and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); sum.Value = 0; // Fill in the subtraction problem. minuend = randomizer.Next(1, 101); subtrahend = randomizer.Next(1, minuend); minusLeftLabel.Text = minuend.ToString(); minusRightLabel.Text = subtrahend.ToString(); difference.Value = 0; // Start the timer. timeLeft = 30; timeLabel.Text = "30 seconds"; timer1.Start(); }
這個程式碼以稍微不同的方式使用 Random 類別 Next() 方法。 當您指定兩個值時,它會挑選一個隨機數字,此隨機數字大於或等於第一個數字且小於第二個數字。 下一行會自 1 至 100 選擇一個隨機數字,並將它儲存在被減數中。
minuend = randomizer.Next(1, 101)
minuend = randomizer.Next(1, 101);
有幾種方式可以呼叫 Random 類別 Next() 方法。 當您能夠以多種方式來呼叫某個方法時,此方法就稱為「多載方法」(Overloaded Method),您可以利用 IntelliSense 來了解這點。 再看一下 Next() 方法的 [IntelliSense] 視窗工具提示。
Intellisense 視窗工具提示
請注意工具提示如何顯示 [(+ 2 多載)]。 這表示您還有其他兩種方式可以呼叫 Next() 方法。 當您輸入 StartTheQuiz() 方法的新程式碼時,您可以檢視其他資訊。 輸入 randomizer.Next(, 之後,[IntelliSense] 視窗會隨即開啟。 按向上鍵和向下鍵,在這些多載之間瀏覽,如下列圖片所示。
Intellisense 視窗多載
上圖是您想要的方式,因為它可讓您指定最小值和最大值。
修改 CheckTheAnswer() 方法來檢查正確的減法答案。 程式碼看起來應該如下所示。
''' <summary> ''' Check the answer to see if the user got everything right. ''' </summary> ''' <returns>True if the answer's correct, false otherwise.</returns> ''' <remarks></remarks> Public Function CheckTheAnswer() As Boolean If addend1 + addend2 = sum.Value AndAlso minuend - subtrahend = difference.Value Then Return True Else Return False End If End Function
/// <summary> /// Check the answer to see if the user got everything right. /// </summary> /// <returns>True if the answer's correct, false otherwise.</returns> private bool CheckTheAnswer() { if ((addend1 + addend2 == sum.Value) && (minuend - subtrahend == difference.Value)) return true; else return false; }
&& 是 Visual C# logical and 運算子。 在 Visual Basic 中,對等的運算子是 AndAlso。 「如果 addend1 加 addend2 等於 NumericUpDown 的總和值,以及如果 minuend 減 subtrahend 等於 NumericUpDown 的差值」,在說法上都一樣。 只有當加法問題正確且減法問題也正確時,CheckTheAnswer() 方法才會傳回 true。
變更計時器的 Tick 事件處理常式的最後一部分,讓事件處理常式在時間結束時填入正確答案。 程式碼看起來應該如下所示。
Else ' If the user ran out of time, stop the timer, show ' a MessageBox, and fill in the answers. Timer1.Stop() timeLabel.Text = "Time's up!" MessageBox.Show("You didn't finish in time.", "Sorry") sum.Value = addend1 + addend2 difference.Value = minuend - subtrahend startButton.Enabled = True End If
else { // If the user ran out of time, stop the timer, show // a MessageBox, and fill in the answers. timer1.Stop(); timeLabel.Text = "Time's up!"; MessageBox.Show("You didn't finish in time.", "Sorry"); sum.Value = addend1 + addend2; difference.Value = minuend - subtrahend; startButton.Enabled = true; }
儲存並執行程式碼。 您的程式現在應該已具備減法問題,如下列圖片所示。
減法問題的數學測驗
若要繼續或檢視
若要移到下一個教學課程步驟,請參閱步驟 7:加入乘法和除法問題。
若要回到上一個教學課程步驟,請參閱步驟 5:加入 NumericUpDown 控制項的 Enter 事件處理常式。