• Status: Solved
• Priority: Medium
• Security: Public
• Views: 69

# Array Median As Double

I have a randomly generated array of integers between 1 and 100, and the array's length is between 5 and 10. The array is sorted in ascending order.

I am trying to determine how I would calculate the median. Part of the criteria is to "declare the median as a double." My current work uses an If...Else loop to get the median, but the median is not declared. I realize I have to start over, but I am unsure where even to begin.
0
Marie Hester
• 2
• 2
1 Solution

RetiredCommented:
Please post the code you have come up with as a starting point.
1

Author Commented:
I wound up removing the loop all together, but now the median is not calculating correctly.

``````Dim rnd As New Random()
Dim randArray(10) As Integer

For n As Integer = 5 To 10
randArray(n) = rnd.Next(1, 100)

Next

Array.Sort(randArray)

For n As Integer = 5 To 10
txtOutput.AppendText(randArray(n).ToString + Space(4))
Next

Dim num1 As Double = randArray(randArray.Length \ 2)
Dim num2 As Double= randArray((randArray.Length \ 2) - 1)
Dim median As Double = (num1 + num2) \ 2
lblMedian.Text = (median.ToString)
``````

Before the loop I had was similar to this:

If (ubound(array) mod 2) = 0 Then

' odd number of items
median = array(ubound(array) \ 2)

Else

' even number of items
median = (array(ubound(array) \ 2) + array(1 + ubound(array) \ 2)) / 2
0

RetiredCommented:
Hi Marie;

``````'' This value is 1 less then the number of values wanted, arrays are zero based
Dim numberOfValues As Integer = 9
Dim rnd As New Random()
'' This array had 11 elements in it, index is zero based
'' An index of 9 gives 10 elements 0 - 9
Dim randArray(numberOfValues - 1) As Integer

'' When I read this, "and the array's length is between 5 and 10.",
'' Now this For loop, "For n As Integer = 5 To 10", only uses the last 6
'' elements of the array leaving elements 0 - 4 empty. Is the statement looking to handle
'' any number of integers between 5 and 10 numbers. The modified For loop will always
'' load all elements of the array.
For n As Integer = 0 To (numberOfValues - 1)
randArray(n) = rnd.Next(1, 100)
Next

Array.Sort(randArray)

'' Modified For loop to match the number of elements in the array
'' Clear the text from last execution of this code
txtOutput.Clear()
lblMedian.Text = ""
For n As Integer = 0 To (numberOfValues - 1)
txtOutput.AppendText(randArray(n).ToString + Space(4))
Next

'' Using Integer Division
Dim num1 As Integer = (randArray.Length \ 2) - 1
Dim num2 As Integer = num1 + 1
Dim median As Double = 0.0

'' Test to see if the number of elements is even or odd
If numberOfValues Mod 2 = 0 Then
'' Is Even
median = (randArray(num1) + randArray(num2)) / 2
Else
'' Is Odd
median = randArray(num2)
End If

lblMedian.Text = (median.ToString)
``````
1

Author Commented:
Thank you so much for your assistance.

Your comments were extremely helpful. I realize now where I was going wrong and why I wasn't getting the desired results.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.