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