다음을 통해 공유


6단계: 빼기 문제 추가

빼기 문제를 추가하려면 다음과 같이 해야 합니다.

  • 빼기 값을 저장합니다.

  • 문제를 위한 난수를 생성합니다. 답은 0에서 100 사이여야 합니다.

  • 답을 확인하는 메서드를 업데이트하여 새 빼기 문제도 검사하도록 합니다.

  • 시간이 다 되면 자동으로 올바른 답을 채우도록 타이머의 Tick 이벤트 처리기를 업데이트합니다.

빼기 문제를 추가하려면

  1. 먼저 값을 저장할 위치가 필요하므로 빼기 문제를 위한 두 개의 정수를 폼에 추가합니다.더하기 정수와 타이머 정수 사이에 새 코드가 표시됩니다.이 코드는 다음과 같습니다.

    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-용어 프로그래밍 되지 않습니다.이러한 이름은 뺌수(감수)와 빼임수(피감수)를 산술 형식으로 표현한 일반적인 이름입니다.차는 피감수에서 감수를 뺀 값입니다.프로그램에서 정수, 컨트롤, 구성 요소 또는 메서드에 특정 이름을 사용하도록 요구하지 않기 때문에 다른 이름을 사용할 수도 있습니다.이름을 숫자로 시작하면 안 된다는 것과 같은 몇 가지 규칙이 있지만 일반적으로 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() 메서드는 여러 가지 방식으로 호출할 수 있습니다.메서드를 여러 가지 방법으로 호출할 수 있는 경우, 즉 메서드가 오버로드된 메서드인 경우 IntelliSense를 사용하여 이를 탐색할 수 있습니다.Next() 메서드에 대한 IntelliSense 창 도구 설명을 자세히 살펴봅니다.

    Intellisense 창 도구 설명

    Next 메서드

    도구 설명에 **(+ 2 overload(s))**가 어떻게 표시되는지 확인합니다.이는 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입니다.이는 "가수1과 가수2를 더한 값이 NumericUpDown의 합에 해당하는 값과 같은 경우 및 피감수에서 감수를 뺀 값이 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. 코드를 저장하고 실행합니다.이제 다음 그림과 같이 프로그램에 빼기 문제가 있어야 합니다.

    빼기 문제가 있는 수학 퀴즈

    뺄셈 문제가 있는 수학 퀴즈

계속하거나 검토하려면