2016-05-17 11 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/UsingAggregatingAnnarray.htmまたはhttps://msdn.microsoft.com/en-us/library/bb546138(v=vs.100).aspxの番号を参照してください –

答えて

3

使用LINQの...

Dim average As Double = y.Average() 

を設定

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 

あなたがLINQので行うことができますもう一つは除外していますあなたの平均からの特定の値。この例では、myNumbers()の9つの項目を10に設定し、10番目の項目をゼロに設定しています。私は最初にLinqを使って0より大きい数値をフィルタリングし、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さらに強力になっを作成することができます。あなたは.NET開発者なら、あなたは単に簡単な環境を必要とLINQのかを使用することを学ぶしたい場合は、この例では、私は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コードをテストしたら、LinqPadを強くお勧めします。私はLinqPadをこの記事のすべてのコードに使用しました。

http://www.linqpad.net/

1

値の集合の平均は、値の合計を値の数で割ったものに等しくなります。 あなたは、配列のすべての値を追加し、あなたはすべての値を合計して、分割する必要がある10

1

によって分割する変数合計を宣言する必要があります。私はそれのための簡単な関数を使用してお勧め:ちょうどgetAverageに平均(Y)

関連する問題