Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im sechsten Teil dieses Lernprogramms fügen Sie eine Subtraktionsaufgabe hinzu und erfahren, wie die folgenden Aufgaben ausgeführt werden:
Speichern Sie die Subtraktionswerte.
Generieren Sie Zufallszahlen für die Aufgabe (und stellen Sie sicher, dass die Antwort ein Wert zwischen 0 und 100 ist).
Aktualisieren Sie die Methode, mit der die Antworten überprüft werden, damit auch die neue Subtraktionsaufgabe überprüft wird.
Aktualisieren Sie den Tick-Ereignishandler des Zeitgebers, damit der Ereignishandler die richtige Antwort ausgibt, wenn die Zeit abgelaufen ist.
So fügen Sie eine Subtraktionsaufgabe hinzu
Fügen Sie dem Formular zwischen den Ganzzahlvariablen für die Additionsaufgabe und dem Zeitgeber zwei Ganzzahlvariablen für die Subtraktionsaufgabe hinzu.Der Code sollte wie folgt aussehen:
Public Class Form1 ' 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 ' These integer variables store the numbers ' for the subtraction problem. Private minuend As Integer Private subtrahend As Integer ' This integer variable keeps track of the ' remaining time. Private timeLeft As Integerpublic partial class Form1 : Form { // 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; // These integer variables store the numbers // for the subtraction problem. int minuend; int subtrahend; // This integer variable keeps track of the // remaining time. int timeLeft;Die Namen der neuen Ganzzahlvariablen – minuend und subtrahend – sind keine Programmierbegriffe.Es handelt sich um traditionell in der Arithmetik verwendete Namen für die Zahl, die subtrahiert wird (der Subtrahend), und die Zahl, von der subtrahiert wird (der Minuend).Die Differenz ist der Minuend minus Subtrahend.Sie können auch andere Namen verwenden, da das Programm keine bestimmten Namen für Variablen, Steuerelemente, Komponenten oder Methoden erfordert.Sie müssen Regeln wie "Starten von Namen nicht mit Ziffern ausführen" beachten, jedoch können Sie Namen wie x1, x2, x3 und x4 im Allgemeinen verwenden.Gattungsnamen führen jedoch dazu, dass Code schwer lesbar wird und Probleme nahezu unmöglich erkannt werden können.Damit die Variablennamen eindeutig und nützlich bleiben, sollten Sie später in diesem Lernprogramm die traditionellen Namen für Multiplikation (Multiplikand × Multiplikator = Produkt) und Division (Dividend ÷ Divisor = Quotient) verwenden.
Anschließend ändern Sie die StartTheQuiz()-Methode, um Zufallswerte für die Subtraktionsaufgabe bereitzustellen.
Fügen Sie nach dem Kommentar "Fill in the subtraction problem" folgenden Code hinzu.
''' <summary> ''' Start the quiz by filling in all of the problem ''' values 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 ' 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 problem /// values 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; // 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(); }Um Negativantworten für die Subtraktionsaufgabe zu verhindern, wird in diesem Code die Next()-Methode der Random-Klasse geringfügig anders verwendet als in der Additionsaufgabe.Wenn Sie der Next()-Methode zwei Werte zuweisen, wird eine Zufallszahl ausgewählt, die größer oder gleich dem ersten Wert und kleiner als der zweite Wert ist.Mit dem folgenden Code wird eine Zufallszahl von 1 bis 100 ausgewählt, die in der Minuend-Variablen gespeichert wird.
minuend = randomizer.Next(1, 101)minuend = randomizer.Next(1, 101);Sie können die Next()-Methode der Random-Klasse, die zuvor in diesem Lernprogramm "randomizer" genannt wurde, auf unterschiedliche Weise aufrufen.Methoden, für die es mehrere Arten des Aufrufs gibt, werden als "überladene" Methoden bezeichnet. Sie können mithilfe von IntelliSense untersucht werden.Werfen Sie einen weiteren Blick auf die QuickInfo für die Next()-Methode im IntelliSense-Fenster.
QuickInfo im IntelliSense-Fenster
.png)
Die QuickInfo zeigt (+ 2 Überladung(en)) an, was bedeutet, dass Sie die Next()-Methode auf zwei andere Arten aufrufen können.Überladungen enthalten unterschiedliche Anzahl und Typen von Argumenten, sodass sie alle mit leichten Unterschieden funktionieren.Beispielsweise könnte eine Methode ein einzelnes ganzzahliges Argument haben, während eine der entsprechenden Überladungen eine Ganzzahl und eine Zeichenfolge enthalten kann.Wählen Sie die richtige Überladung je nach gewünschter Funktionen aus.Wenn Sie der StartTheQuiz()-Methode den Code hinzufügen, werden weitere Informationen im IntelliSense-Fenster angezeigt, sobald Sie randomizer.Next( eingeben.Wählen Sie die NACH-OBEN-TASTE und die NACH-UNTEN-TASTE aus, um die Überladungen zu durchlaufen, wie in der folgenden Abbildung gezeigt.
Überladung für Next()-Methode in IntelliSense
.png)
In diesem Fall wählen Sie die letzte Überladung aus, da Sie Mindest- und Höchstwerte angeben können.
Ändern Sie die CheckTheAnswer()-Methode, um zu prüfen, ob die Antwort für die Subtraktionsaufgabe korrekt ist.
''' <summary> ''' Check the answers 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 answers 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; }In Visual C# ist && der logical and-Operator.In Visual Basic ist AndAlso die Entsprechung dieses Operators.Diese Operatoren entsprechen dem Wortlaut "Wenn die Summe aus addend1 und addend2 gleich dem Wert von sum NumericUpDown ist und wenn Minuend minus Subtrahend gleich dem Wert von difference NumericUpDown ist". Die CheckTheAnswer()-Methode gibt nur true zurück, wenn die Antworten der Additions- und die Subtraktionsaufgaben richtig sind.
Ersetzen Sie den letzten Teil des Tick-Ereignishandlers durch folgenden Code, damit die richtige Antwort ausgegeben wird, wenn die Zeit abgelaufen ist.
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 Ifelse { // 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; }Speichern Sie den Code, und führen Sie ihn aus.
Das Programm enthält eine Subtraktionsaufgabe, wie in der folgenden Abbildung veranschaulicht.
Mathequiz mit Subtraktionsaufgabe
.png)
So fahren Sie fort oder überprüfen die Angaben
Um zum nächsten Schritt des Lernprogramms zu wechseln, klicken Sie auf Schritt 7: Hinzufügen von Multiplikations- und Divisionsaufgaben.
Um zum vorherigen Schritt des Lernprogramms zurückzukehren, klicken Sie auf Schritt 5: Hinzufügen von Enter-Ereignishandlern für die NumericUpDown-Steuerelemente.