【问题标题】:How to put user inputs into an array and find the median in VBasic如何将用户输入放入数组并在 Basic 中找到中位数
【发布时间】:2014-01-17 04:12:10
【问题描述】:

所以我正在编写一个应用程序,它通过输入框从用户那里获取输入,并在列表框中显示他们的数字。同时,用户的输入被扔到一个数组中,我不知道该怎么做。这是我目前所拥有的。

以下是用户输入的代码。

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

这是获取数组的代码,确定它是偶数还是奇数,并找到中位数。出于某种原因,它向我显示了一个“空”错误,因为我将数组声明为私有的,所以我可以在两者中使用它。

    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

【问题讨论】:

    标签: vb.net


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,您在一个 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
      

      【讨论】:

        【解决方案3】:

        arrNumbers.Average()怎么样

        【讨论】:

        • 平均值不是中位数。此外,如果他得到一个空引用异常,该数组对于 .Average 也将一无所有
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-19
        • 2023-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多