Donc, pour mon code, j'essaie de calculer la moyenne des numéros que l'utilisateur doit entrer 7 numéros et que je souhaite que la moyenne soit calculée, l'après que les chiffres ont été entrés. Je sais que la moyenne est la somme de tous les nombres divisés par le nombre de numéros il y a, mais je ne sais pas comment mettre cela dans mon code
Ceci est mon code: P>
Dim output As Integer If Not Integer.TryParse(InputTextbox.Text, output) Then MessageBox.Show("ERROR! Data must be a whole number") Else UnitsTextbox.AppendText(Environment.NewLine & InputTextbox.Text) End If InputTextbox.Text = String.Empty If UnitsTextbox.Lines.Length >= 8 Then EnterButton.Enabled = False If UnitsTextbox.Lines.Length >= 8 Then InputTextbox.Enabled = False End If End If If output >= 0 AndAlso output <= 1000 Then Exit Sub Else MessageBox.Show("ERROR! Number must be between 0 and 1000!") End If End Sub
3 Réponses :
J'utiliserais une liste de liste pour émettre vos numéros, ainsi qu'une liste (d'entier) comme suggéré par les autres. Ensuite, vous pouvez définir la DataSource pour que les chiffres apparaissent pour vous, comme celui-ci:
Public Class Form1 Private Units As New List(Of Integer) Private Sub EnterButton_Click(sender As Object, e As EventArgs) Handles EnterButton.Click Dim output As Integer If Integer.TryParse(InputTextBox.Text, output) Then If output >= 0 AndAlso output <= 1000 Then Units.Add(output) UnitsListBox.DataSource = Nothing UnitsListBox.DataSource = Units InputTextBox.Clear() If Units.Count = 7 Then InputTextBox.Enabled = False EnterButton.Enabled = False ' ... calculate the average in here! ... Dim sum As Integer ' ... fill in the code ... Dim average As Decimal ' ... fill in the code ... lblAverage.Text = "Average: " & average.ToString("N2") Else InputTextBox.Focus() End If Else MessageBox.Show("ERROR! Number must be between 0 and 1000!") End If Else MessageBox.Show("ERROR! Data must be a whole number") End If End Sub End Class
Vous avez votre liste de chiffres dans une zone de texte, mais comme ils sont dans la propriété .Text de la zone de texte, ils sont des chiffres non des chiffres.
Le premier travail consiste à les sortir de la zone de texte et à les modifier en chiffres. Qui est accompli dans la première pour chacun ajouter chaque entrée à une liste d'entiers. P> li>
LINQ peut maintenant calculer la moyenne dans un peu de code. Ce n'est pas nécessairement plus rapide que l'ancienne façon qui suit. P> li>
L'ancien chemin produit le même résultat. P> li> OL>
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim lst As New List(Of Integer) For Each line In TextBox1.Lines lst.Add(CInt(line)) Next 'The Linq way to get Average Dim avg = Aggregate number In lst Into Average(number) MessageBox.Show($"The Average using Linq is {avg}") 'EDIT Thanks to Codexer, Linq even shorter code Dim avg1 = lst.Average MessageBox.Show(avg1.ToString) 'The old way Dim sum As Integer For Each number As Integer In lst sum += number Next 'Now that you have the sum you can do the division Dim avg2 = sum / lst.Count MessageBox.Show($"The Average using the old way is {avg2}") End Sub
Merci d'avoir expliqué, c'est principalement mon problème mes professeurs n'expliquent pas assez les choses pour que je puisse comprendre
@Mary juste une légère suggestion imho. Vous pouvez appeler .Avoir code> sur la liste
lst.AOOver () code> qui est déjà un
linq code> extension.
@ Çöđěxěŕ merci pour la mise à jour. J'apprends Linq hors d'un vieux livre et je suppose qu'il y aurait des améliorations.
@Mary Vous êtes les bienvenus, les extensions sont parfois utiles.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim strA$() = Nothing, Average%, intT% 'split the text into lines strA = Split(TextBox1.Text, vbNewLine) 'get array length For a = 0 To strA.GetUpperBound(0) 'get the value of the array and summarize intT += CInt(strA(a)) Next Average = intT / strA.Length End Sub
Pouvez-vous expliquer votre réponse?