-2
votes

Comment puis-je calculer la moyenne?

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


0 commentaires

3 Réponses :


2
votes

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


0 commentaires

1
votes

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.

  1. 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>

  2. 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>

  3. 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
    


4 commentaires

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 sur la liste lst.AOOver () qui est déjà un linq 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.



0
votes
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

1 commentaires

Pouvez-vous expliquer votre réponse?