如何将用户输入放入数组并在VBasic中找到中位数

时间:2014-01-17 04:12:11

标签: vb.net

所以我正在编写一个应用程序,它通过输入框接收用户的输入,并在列表框中显示它们的数字。同时,用户的输入被抛入一个数组,我不知道该怎么做。这是我到目前为止所做的。

以下是用户输入的代码。

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'错误,因为我把数组声明为私有,所以我可以在两者中使用它。

    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

3 个答案:

答案 0 :(得分:0)

如果我理解正确,你在一个Sub中声明了,然后在另一个Sub中使用它。仅因为变量具有相同的名称,它们才会始终指向相同的值。

如果您声明的块结束,变量将“超出范围”。例如,这可以是方法中的某个循环,也可以是方法本身。因此,在您的情况下,用户输入在完成输入后就会消失。

你有多种方法可以解决这个问题。由于您将值存储在列表框中,因此可以使用中值方法从中获取值。

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

您也可以将arrNumbers声明为全局变量,而不是将语句移到sub之外。但是在将值存储在其中之前,请确保使用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

答案 1 :(得分:-1)

arrNumbers.Average()

怎么样?

答案 2 :(得分:-1)

在VB.NET中有一个理想的函数来查找任何数组的中位数(类型Double可以更改为数组的类型):

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