6단계: 빼기 문제 추가
빼기 문제를 추가하려면 다음과 같이 해야 합니다.
빼기 값을 저장합니다.
문제를 위한 난수를 생성합니다. 답은 0에서 100 사이여야 합니다.
답을 확인하는 메서드를 업데이트하여 새 빼기 문제도 검사하도록 합니다.
시간이 다 되면 자동으로 올바른 답을 채우도록 타이머의 Tick 이벤트 처리기를 업데이트합니다.
빼기 문제를 추가하려면
먼저 값을 저장할 위치가 필요하므로 빼기 문제를 위한 두 개의 정수를 폼에 추가합니다.더하기 정수와 타이머 정수 사이에 새 코드가 표시됩니다.이 코드는 다음과 같습니다.
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-용어 프로그래밍 되지 않습니다.이러한 이름은 뺌수(감수)와 빼임수(피감수)를 산술 형식으로 표현한 일반적인 이름입니다.차는 피감수에서 감수를 뺀 값입니다.프로그램에서 정수, 컨트롤, 구성 요소 또는 메서드에 특정 이름을 사용하도록 요구하지 않기 때문에 다른 이름을 사용할 수도 있습니다.이름을 숫자로 시작하면 안 된다는 것과 같은 몇 가지 규칙이 있지만 일반적으로 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() 메서드는 여러 가지 방식으로 호출할 수 있습니다.메서드를 여러 가지 방법으로 호출할 수 있는 경우, 즉 메서드가 오버로드된 메서드인 경우 IntelliSense를 사용하여 이를 탐색할 수 있습니다.Next() 메서드에 대한 IntelliSense 창 도구 설명을 자세히 살펴봅니다.
Intellisense 창 도구 설명
도구 설명에 **(+ 2 overload(s))**가 어떻게 표시되는지 확인합니다.이는 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입니다.이는 "가수1과 가수2를 더한 값이 NumericUpDown의 합에 해당하는 값과 같은 경우 및 피감수에서 감수를 뺀 값이 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 이벤트 처리기 추가를 참조하십시오.