2016-05-17 222 views
1
Public Class Form1 
Dim x As Integer 
Dim y(9) As Double 
Dim average As Double 
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    For x = 0 To 9 
     y(x) = x 
    Next 
    average = y(9)/10 
    Label1.Text = average 
End Sub 
End Class 

我在嘗試計算0到9數組的平均值時遇到了問題,我意識到我的代碼只會計算9除以10,我該如何繼續計算10個數的平均值?如何計算數組的平均值?

+0

有沒有什麼用? http://www.java2s.com/Code/VB/LINQ/UsingAggregatingAveragetoaarray.htm或https://msdn.microsoft.com/en-us/library/bb546138(v=vs.100).aspx –

回答

3

使用LINQ ...

Dim average As Double = y.Average() 

你可以使用LINQ做的另一件事是排除某些值來自你的平均值。以此示例將myNumbers()中的9個項目設置爲10,然後將第10個項目設置爲零。我使用Linq來首先篩選大於零的數字,然後我執行Average聚合。

Dim myNumbers(9) As Double 
For i As Integer = 0 To 8 Step 1 
    myNumbers(i) = 10 
Next i 

myNumbers(9) = 0 

Dim average As Double = myNumbers.Where(Function(num) num > 0).Average() 
'Optionally, you could also do it this way: 
Dim average2 As Double = (From num In myNumbers 
          Where num > 0).Average() 
MessageBox.Show(average) 

當你使用類時會更好。考慮這個類Thing

Public Class Thing 
Public Name As String = "" 
Public Number As Double = 0 

Public Sub New (name As String, number As Double) 
    Me.Name= name 
    Me.Number = number 
End Sub 
End Class 

我可以創建一個類的集合和.Where變得更加強大。在這個例子中,我通過Thing.Name

Dim things As List(Of Thing) = New List(Of Thing)() 
things.Add(New Thing("Michael", 10)) 
things.Add(New Thing("Michael", 5)) 
things.Add(New Thing("Michael", 7)) 
things.Add(New Thing("Michael", 9)) 
things.Add(New Thing("Rian", 10)) 
things.Add(New Thing("Rian", 10)) 
things.Add(New Thing("Rian", 10)) 

Dim AverageMichael As Double = things.Where(Function(thing) thing.Name = "Michael").Average(Function(thing) thing.Number) 
Dim AverageRian As Double = things.Where(Function(thing) thing.Name = "Rian").Average(Function(thing) thing.Number) 

MessageBox.Show(AverageMichael) 
MessageBox.Show(AverageRian) 

平均​​旁註
如果你是一個.NET開發人員,你想學習使用Linq或者你只需​​要一個簡單的環境,測試.NET代碼,然後我強烈推薦LinqPad。我在本文中使用了LinqPad的所有代碼。

http://www.linqpad.net/

1

一組值的平均值等於值的總和除以值的數量。 您需要聲明一個變量總和以添加陣列的每個值,然後除以10.

1

您需要對所有值進行求和然後除。我建議使用一個簡單的功能吧:

Function getAverage(y As Double()) As Double 
    Dim z As Double 
    For Each i As Double In y 
     z += i 
    Next 
    Return z/y.Length 
End Function 

只需設置平均getAverage(Y)