2014-01-17 55 views
0

因此,我編寫了一個應用程序,該應用程序通過輸入框接受用戶的輸入,並在列表框中顯示其編號。同時,用戶的輸入被引入到一個數組中,我不知道該怎麼做。這是我迄今爲止所擁有的。如何將用戶輸入放入數組並找到VBasic中的中位數

以下是用戶輸入的代碼。

Dim blnisvalid As Boolean 
    Dim intArrayLength, intNumber As Integer 
    intArrayLength += 1 
    Dim arrNumbers(intArrayLength) As Integer 
    Array.Sort(arrNumbers) 
    For IntI As Integer = 1 To arrNumbers.GetUpperBound(0) 
     blnisvalid = Integer.TryParse(InputBox("Please enter a number"), intNumber) 
     If blnisvalid = False OrElse intNumber <= 0 Then 
      MessageBox.Show("Please enter a valid value") 
     ElseIf blnisvalid = True Then 
      lstNumbers.Items.Add(intNumber) 
     End If 


    Next 

這是接受數組,確定它是偶數還是奇數並找到中位數的代碼。出於某種原因,它向我展示了一個'null'錯誤,因爲我把這個數組聲明爲private,所以我可以在兩者中使用它。

Array.Sort(arrNumbers) 
    If arrNumbers.Length Mod 2 <> 0 Then 
     MessageBox.Show("Median =" & arrNumbers(arrNumbers.GetUpperBound(0) \ 2).ToString) 
    Else 
     Dim intNum1 As Integer = arrNumbers(arrNumbers.Length \ 2) 
     Dim intNum2 As Integer = arrNumbers((arrNumbers.Length \ 2) - 1) 
     Dim intMedian As Integer = (intNum1 + intNum2) \ 2 
     MessageBox.Show("Median =" & intMedian.ToString) 
    End If 

回答

0

如果我理解正確的你,你聲明的一個子中,然後用它在另一個。只是因爲一個變量具有相同的名稱,所以它們並不總是指向相同的值。

如果您聲明它們的塊結束,則變量將「超出範圍」。這可以是例如您的方法中的某個循環,但也可以是方法本身。因此,在你的情況下,用戶輸入完成後,用戶輸入消失。

你有更多的方法來解決這個問題。由於您將值存儲在列表框中,因此可以使用中值方法從中取值。

Dim arrNumbers(lstNumbers.items. Count) as 
For i = 0 to lstNumbers.items.count - 1 
    ArrNumbers(i) = CInt(lstNumbers.items(i)) 
Next 
'calculate median 

您還可以聲明arrNumbers作爲全局變量,而不是通過移動子語句之外的語句。但在存儲值之前,請確保使用redim命令設置數組邊界。

Public Class Form1 
    Private arrNumbers() as Integer 
    Private Sub GetInput() 
    Redim arrNumbers(intArrayLength-1) as Integer '-1 because you are declaring the upper boundary, not the length, so (1) would mean two values in the array 
    'Get user input 
    End Sub 
    Private Sub GetMedian() 
    If IsNothing(arrNumbers) Then Exit Sub 'Check this to prevent a Null-Exception 
    'Calculate the median 
    End Sub 
End Class 
+0

你是我的英雄,非常感謝你的幫助! – user3059116

-1

如何arrNumbers.Average()

+0

平均值不平均。此外,如果他得到一個nullreference異常,該數組也將是沒有什麼。平均 – Jens

-1

有一個在VB.NET的理想功能找到任何陣列的中位數(雙類型可以改變你的陣列的類型):

Public Function Median(ByVal YourArray As Double()) As Double 
     Dim size As Integer = YourArray.Length 
     If size = 0 Then Return 0 
     If size Mod 2 = 0 Then 
      Return (YourArray(CInt(size/2) - 1) + YourArray(CInt(size/2)))/2 
     Else 
      Return YourArray(CInt(Math.Floor(size/2))) 
     End If 
End Function 
+0

http://stackoverflow.com/help/how-to-ask –

相關問題