user5187524
user5187524

Reputation:

Visual Basic - How to sort highest and lowest number of a series?

****I don't necessarily want the code to fix this problem, I would just like if someone would be able to explain to me why this is happening or what I could have done better to solve this problem.****

I have a homework assignment where I need to print out the highest and lowest number of a series.I am currently able to print out the highest and lowest numbers but if all of the numbers entered are positive, then it displays my lowest number as 0, and same if all the entered numbers are negative. So if someone would be able to explain how to solve this, without necessarily giving away the answer, it would be greatly appreciated! Here is my code:

Module Module1
'This is going to have the user enter a series of numbers,
'Once the user is finished have them enter '-99' to end the series,
'then it is going to return largest and smallest number
Sub Main()
    NumSeries()
End Sub

'This is going to get the series from the users
Sub NumSeries()
    Dim largeNum As Integer = 0
    Dim smallNum As Integer = 0
    Dim userNum As Integer = 0
    Dim largeTemp As Integer = 0
    Dim smallTemp As Integer = 0

    Console.WriteLine("Please enter a series of positive and negative numbers")
    Console.WriteLine("Then type '-99' to end the series")
    Console.WriteLine()

    While (userNum <> -99)
        Console.Write("Enter num: ")
        userNum = Console.ReadLine()

        If (userNum > largeTemp) Then
            largeTemp = userNum
            largeNum = largeTemp
        ElseIf (userNum < smallTemp And userNum <> -99) Then
            smallTemp = userNum
            smallNum = smallTemp
        End If

    End While
    Console.WriteLine("The largest number is " & largeNum)
    Console.WriteLine("The smallest number is " & smallNum)
End Sub
End Module

Upvotes: 0

Views: 5649

Answers (3)

Pradeep Kumar
Pradeep Kumar

Reputation: 6969

A few things you should improve upon:

  1. You can remove the temp variables. They don't serve any other purpose other than unnecessarily consuming memory and CPU time.

  2. You should initialize your min and max variables with highest and lowest possible values respectively. If you think larger than integer values should be allowed, change the type to Long

    Dim largeNum As Integer = Integer.MinValue
    Dim smallNum As Integer = Integer.MaxValue
    
  3. Remove the ElseIf. Use two If statements instead. This is so that both variables will be set with the very first input itself.

    If (userNum > largeNum) Then largeNum = userNum
    If (userNum < smallNum) Then smallNum = userNum
    

Upvotes: 0

xpda
xpda

Reputation: 15813

Two points:

  1. You don't need the variables largeTemp and smallTemp.

  2. (The answer to your question) You should initialize largeNum to a very small number, and smallNum to a very large number. For example, if smallNum is set to zero at the beginning of the program, only numbers smaller than zero will replace it. To find an error like this, you should trace through the program either by hand or with a debugger and see what happens at each step. It would be a good idea to do this now so you'll understand the problem. (Alternatively, as Idle-Mind pointed out, you can initialize largeNum and smallNum to the first item in the list.)

Upvotes: 1

Idle_Mind
Idle_Mind

Reputation: 39122

Don't use any sentinel values at all. Simply declare a Boolean variable so you know if you the value retrieved is the very first one or not:

Dim FirstEntry As Boolean = True

If it is, then set both largeNum and smallNum to that value. Now just compare each additional entered value with those stored values to see if they are bigger or smaller than the previously known extreme.

Upvotes: 0

Related Questions