2014-01-17 54 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 –

相关问题