2단계: 난수 더하기 문제 만들기Step 2: Create a Random Addition Problem

이 자습서의 2단계에서는 난수 기반 수학 문제를 추가하여 퀴즈를 좀 더 어렵게 만듭니다.In the second part of this tutorial, you make the quiz challenging by adding math problems that are based on random numbers. 문제를 채우고 카운트다운 타이머를 시작하는 StartTheQuiz()라는 메서드도 추가합니다.You also create a method that's named StartTheQuiz() and that fills in the problems and starts the countdown timer. 이 자습서의 뒷부분에서는 빼기, 곱하기 및 나누기 문제를 추가합니다.Later in this tutorial, you'll add the subtraction, multiplication, and division problems.

참고

이 항목은 기본 코딩 개념에 대해 설명하는 자습서 시리즈의 일부입니다.This topic is part of a tutorial series about basic coding concepts. 자습서에 대한 개요는 자습서 2: 시간이 지정된 수학 퀴즈 만들기를 참조하세요.For an overview of the tutorial, see Tutorial 2: Create a Timed Math Quiz.

난수 더하기 문제를 만들려면To create a random addition problem

  1. 폼 디자이너에서 폼(Form1)을 선택합니다.In the form designer, choose the form (Form1).

  2. 메뉴 모음에서 보기, 코드를 차례로 선택합니다.On the menu bar, choose View, Code.

    폼의 숨김 코드를 볼 수 있도록 사용 중인 프로그래밍 언어에 따라 Form1.cs 또는 Form1.vb가 표시됩니다.Form1.cs or Form1.vb appears, depending on the programming language that you're using, so that you can view the code behind the form.

  3. 코드 위쪽에 다음과 같은 Random 문을 추가하여 new 개체를 만듭니다.Create a Random object by adding a new statement near the top of the code, like the following.

    public partial class Form1 : Form
    {
        // Create a Random object called randomizer 
        // to generate random numbers.
        Random randomizer = new Random();
    
    Public Class Form1
    
        ' Create a Random object called randomizer 
        ' to generate random numbers.
        Private randomizer As New Random
    

    Random 개체가 폼에 추가되고 이름이 randomizer로 지정되었습니다.You've added a Random object to your form and named the object randomizer.

    Random을 개체라고 합니다.Random is known as an object. 이전에 한 번쯤 들어보았을 개체의 프로그래밍적 의미에 대해서는 다음 자습서에서 자세히 설명합니다.You've probably heard that word before, and you learn more about what it means for programming in the next tutorial. 지금은 new 문을 사용하여 개체라고 하는 단추, 레이블, 패널, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms, 폼 등의 항목을 만들 수 있다는 점만 기억하면 됩니다.For now, just remember that you can use new statements to create buttons, labels, panels, OpenFileDialogs, ColorDialogs, SoundPlayers, Randoms, and even forms, and those items are referred to as objects. 프로그램을 실행하면 폼이 시작되고 폼의 숨김 코드가 Random 개체를 만들어 이름을 randomizer로 지정합니다.When you run your program, the form is started, and the code behind it creates a Random object and names it randomizer.

    이제 곧 답을 확인하는 메서드를 빌드하게 되므로 퀴즈에서는 각 문제에 대해 생성하는 난수를 저장할 변수를 사용해야 합니다.Soon you'll build a method to check the answers, so your quiz must use variables to store the random numbers that it generates for each problem. 변수 또는 형식을 참조하세요.See Variables or Types. 변수를 적절히 사용하려면 변수를 선언해야 합니다. 즉, 변수의 이름과 데이터 형식을 나열해야 합니다.To properly use variables, you must declare them, which means listing their names and data types.

  4. 폼에 두 개의 정수 변수를 추가하고 이름을 addend1addend2로 지정합니다.Add two integer variables to the form, and name them addend1 and addend2.

    참고

    정수 변수를 C#에서는 int라고 하고 Visual Basic에서는 Integer라고 합니다.An integer variable is known as an int in C# or an Integer in Visual Basic. 이러한 종류의 변수는 -2147483648에서 2147483647 사이의 소수가 아닌 양의 정수 또는 음의 정수만 저장할 수 있습니다.This kind of variable stores a positive or negative number from -2147483648 through 2147483647 and can store only whole numbers, not decimals.

    다음 코드에서처럼 Random 개체를 추가할 때와 비슷한 구문을 사용하여 정수 변수를 추가할 수 있습니다.You use a similar syntax to add an integer variable as you did to add the Random object, as the following code shows.

    // Create a Random object called randomizer 
    // to generate random numbers.
    Random randomizer = new Random();
    
    // These integer variables store the numbers 
    // for the addition problem. 
    int addend1;
    int addend2;
    
    ' Create a Random object called randomizer 
    ' to generate random numbers.
    Private randomizer As New Random
    
    ' These integer variables store the numbers 
    ' for the addition problem. 
    Private addend1 As Integer
    Private addend2 As Integer
    
  5. StartTheQuiz() 개체의 Random 메서드를 사용하여 레이블에 난수를 표시하는 Next()라는 메서드를 추가합니다.Add a method that's named StartTheQuiz() and that uses the Random object's Next() method to show the random numbers in the labels. StartTheQuiz()는 모든 문제를 채우고 타이머를 시작합니다. 주석을 추가하십시오.StartTheQuiz() will eventually fill in all of the problems and then start the timer, so add a comment. 함수는 다음과 같습니다.The function should look like the following.

    /// <summary>
    /// Start the quiz by filling in all of the problems
    /// and starting the timer.
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        // Generate two random numbers to add.
        // Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        // Convert the two randomly generated numbers
        // into strings so that they can be displayed
        // in the label controls.
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        // 'sum' is the name of the NumericUpDown control.
        // This step makes sure its value is zero before
        // adding any values to it.
        sum.Value = 0;
    }
    
    ''' <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.
        ' Generate two random numbers to add.
        ' Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51)
        addend2 = randomizer.Next(51)
    
        ' Convert the two randomly generated numbers
        ' into strings so that they can be displayed
        ' in the label controls.
        plusLeftLabel.Text = addend1.ToString()
        plusRightLabel.Text = addend2.ToString()
    
        ' 'sum' is the name of the NumericUpDown control.
        ' This step makes sure its value is zero before
        ' adding any values to it.
        sum.Value = 0
    End Sub
    

    코드에서 randomizer 뒤에 점(.)을 입력하면 IntelliSense 창이 열리고 호출 가능한 Random 개체의 모든 메서드가 표시됩니다.Notice that when you enter the dot (.) after randomizer in the code, an IntelliSense window opens and shows you all of the Random object's methods that you can call. Intellisense에 나열되는 Next() 메서드를 예로 들면 다음과 같습니다.For example, Intellisense lists the Next() method, as follows.

    Next 메서드Next method
    Next 메서드Next method

    개체 뒤에 점을 입력하면 IntelliSense에 속성, 메서드, 이벤트 등 개체의 멤버 목록이 표시됩니다.When you enter a dot after an object, IntelliSense shows a list of the object's members, such as properties, methods, and events.

    참고

    Next()를 호출할 때처럼 Random 메서드를 randomizer.Next(50) 개체와 함께 사용하는 경우 50 미만(0에서 49 사이)의 난수가 반환됩니다.When you use the Next() method with the Random object, such as when you call randomizer.Next(50), you get a random number that's less than 50 (from 0 through 49). 이 예제에서는 randomizer.Next(51)가 호출되었습니다.In this example, you called randomizer.Next(51). 50이 아니라 51이 사용된 이유는 두 난수를 더해 0에서 100 사이의 답이 나오도록 하기 위해서입니다.You used 51 and not 50 so that the two random numbers will add up to an answer that's from 0 through 100. Next() 메서드에 50을 전달하면 0에서 49 사이의 숫자가 선택되므로 가능한 가장 큰 답은 100이 아니라 98입니다.If you pass 50 to the Next() method, it chooses a number from 0 through 49, so the highest possible answer is 98, not 100. 이 메서드의 처음 두 문을 실행하고 나면 두 개의 정수 변수인 addend1addend2에 각각 0에서 50 사이의 난수 값이 들어갑니다.After the first two statements in the method run, each of the two integer variables, addend1 and addend2, hold a random number from 0 through 50. 이 스크린 샷에는 Visual C# 코드가 나와 있지만 Visual Basic에서도 IntelliSense가 동일하게 작동합니다.This screenshot shows Visual C# code, but IntelliSense works the same way for Visual Basic.

    이러한 문을 자세히 살펴봅니다.Take a closer look at these statements.

    plusLeftLabel.Text = addend1.ToString();
    plusRightLabel.Text = addend2.ToString();
    
    ' Convert the two randomly generated numbers
    ' into strings so that they can be displayed
    ' in the label controls.
    plusLeftLabel.Text = addend1.ToString()
    plusRightLabel.Text = addend2.ToString()
    

    이러한 문은 plusLeftLabelplusRightLabelText 속성을 설정하여 레이블에서 두 개의 난수를 표시하도록 합니다.The statements set the Text properties of plusLeftLabel and plusRightLabel so that they display the two random numbers. 정수의 ToString() 메서드를 사용하여 숫자를 텍스트로 변환해야 합니다.You must use the integer's ToString() method to convert the numbers to text. 프로그래밍에서 문자열은 텍스트를 의미합니다.(In programming, string means text. 레이블 컨트롤에는 숫자가 아니라 텍스트만 표시됩니다.Label controls display only text, not numbers.

  6. 디자인 창에서 시작 단추를 두 번 클릭하거나, 이 단추를 선택한 후 Enter 키를 선택합니다.In the design window, either double-click the Start button, or choose it and then choose the Enter key.

    퀴즈를 푸는 사람이 이 단추를 선택하면 퀴즈가 시작되어야 합니다. 이 동작을 구현하기 위해 방금 전에 Click 이벤트 처리기를 추가했습니다.When a quiz taker chooses this button, the quiz should start, and you've just added a Click event handler to implement that behavior.

  7. 다음 두 문을 추가합니다.Add the following two statements.

    private void startButton_Click(object sender, EventArgs e)
    {
        StartTheQuiz();
        startButton.Enabled = false;           
    }
    
    ' Call the StartTheQuiz() method and enable
    ' the Start button. 
    Private Sub startButton_Click() Handles startButton.Click
        StartTheQuiz()
        startButton.Enabled = False
    End Sub
    

    첫 번째 문은 새 StartTheQuiz() 메서드를 호출합니다.The first statement calls the new StartTheQuiz() method. 두 번째 문은 startButton 컨트롤의 Enabled 속성을 False로 설정하여 퀴즈를 푸는 사람이 퀴즈를 푸는 동안 이 단추를 선택할 수 없도록 합니다.The second statement sets the Enabled property of the startButton control to False so that the quiz taker can't choose the button during a quiz.

  8. 코드를 저장하고 실행한 다음 시작 단추를 선택합니다.Save your code, run it, and then choose the Start button.

    다음 그림과 같이 난수 더하기 문제가 나타납니다.A random addition problem appears, as the following illustration shows.

    임의의 덧셈 문제Random addition problem
    임의의 덧셈 문제Random addition problem

    자습서의 다음 단계에서는 합계를 추가합니다.In the next step of the tutorial, you'll add the sum.

계속하거나 검토하려면To continue or review