共用方式為


步驟 6:加入減法問題

若要加入減法問題,您需要執行下列動作:

  • 儲存減法的值。

  • 產生問題的隨機數字 (並確定答案介於 0 和 100 之間)。

  • 更新計時器的 Tick 事件處理常式,讓事件處理常式在時間結束時填入正確答案。

若要加入減法問題

  1. 首先,您需要位置來儲存值,所以請將減法問題的兩個 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;
    
    注意事項注意事項

    新的字串序列名稱--minuendsubtrahend— 不程式設計條款。它們是算術中的減數 (subtrahend) 和被減數 (minuend) 的慣用名稱。差等於被減數減去減數。您可以使用其他名稱,因為您程式中的 int、控制項、元件或方法不需要特定名稱。有一些規則 (例如,名稱開頭不能是數字),但一般而言,您可以使用 x1、x2、x3、x4 等名稱。但這樣程式碼就不易閱讀,甚至幾乎無法追蹤問題。稍後在本教學課程中,您在乘法 (被乘數 × 乘數 = 乘積) 和除法 (被除數 ÷ 除數 = 商數) 中會使用慣用的名稱。

  2. 接下來,修改 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 視窗工具提示

    Next 方法

    請注意工具提示如何顯示 [(+ 2 多載)]。 這表示您還有其他兩種方式可以呼叫 Next() 方法。 當您輸入 StartTheQuiz() 方法的新程式碼時,您可以檢視其他資訊。 輸入 randomizer.Next(, 之後,[IntelliSense] 視窗會隨即開啟。 按向上鍵和向下鍵,在這些多載之間瀏覽,如下列圖片所示。

    Intellisense 視窗多載

    IntelliSense 視窗多載

    上圖是您想要的方式,因為它可讓您指定最小值和最大值。

  3. 修改 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。

  4. 變更計時器的 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;
    }
    
  5. 儲存並執行程式碼。 您的程式現在應該已具備減法問題,如下列圖片所示。

    減法問題的數學測驗

    包含減法問題的數學測驗

若要繼續或檢視