Jamie Kudla
Jamie Kudla

Reputation: 872

Array and function trouble

I'm having trouble getting this program to work.. I just cant figure out how to get results from GenerateNumbers outputted to the main program to be used in other functions/procedures. I tried

Dim Result1 As String = ThreeResults(0)
Dim Result2 As String = ThreeResults(1)
Dim Result3 As String = ThreeResults(2)

but for some reason it sets the value of each ThreeResults(x) to " "

Module Module1

Sub Main()
    'Declare Variables
    Dim UserAnswer As String = "nothing"
    Dim UserTokens As String
    Dim ThreeResults(2) As String
    Dim Result1 As String = ThreeResults(0)
    Dim Result2 As String = ThreeResults(1)
    Dim Result3 As String = ThreeResults(2)

    'Ask user for number of tokens
    Console.WriteLine("Enter the number of tokens that you want to gamble with (minimum of 1 token)")
    UserTokens = (Console.ReadLine())

    UserTokens = ValidateTokens(UserTokens)

    Do Until UserAnswer = "no"
        ThreeResults = GenerateNumbers()

        UserAnswer = DisplayResults(UserTokens, UserAnswer, Result1, Result2, Result3)
    Loop

End Sub

Function ValidateTokens(ByVal UserTokens)

    Dim dblUserTokens As Double

    Do Until IsNumeric(UserTokens)
        Console.Write("Sorry you did not enter a valid number.  Please try again.   ")
        UserTokens = Console.ReadLine()
    Loop

    'Make sure the user entered in a positive number
    dblUserTokens = CDbl(UserTokens)
    Do Until dblUserTokens > 0
        Console.Write("Sorry you did not enter in a positive number.  Please try again.   ")
        UserTokens = Console.ReadLine()

        'Make sure the user entered in a number
        Do Until IsNumeric(UserTokens)
            Console.Write("Sorry you did not enter a valid number.  Please try again.   ")
            UserTokens = Console.ReadLine()
        Loop
        dblUserTokens = CDbl(UserTokens)


    Loop

    Return UserTokens
End Function

Function GenerateNumbers()
    Dim results(2) As String
    Dim names(5) As String
    Dim x As Integer

    names(0) = "Cherries"
    names(1) = "Oranges"
    names(2) = "Plums"
    names(3) = "Bells"
    names(4) = "Melons"
    names(5) = "Bar"

    For x = 0 To 2
        results(x) = names(CInt(Int((5 * Rnd()) + 1)))
    Next x

    Return results
End Function



Function DisplayResults(ByRef UserTokens, ByVal UserAnswer, ByRef number1, ByRef number2, ByRef number3)
    Console.WriteLine("*** " & number1 & " ** " & number2 & " ** " & number3 & " ***")
    If UserTokens > 0 Then
        Console.WriteLine("You have " & UserTokens & " tokens left, do you want to play again? (yes or no)")
        UserAnswer = (Console.ReadLine())
    Else
        Console.WriteLine("Sorry, you lost all of your tokens!")
    End If

    Return UserAnswer
End Function

End Module

Upvotes: 0

Views: 100

Answers (1)

UnhandledExcepSean
UnhandledExcepSean

Reputation: 12804

You are setting the value of the string only at the start of your main routine. You need to set it after the ThreeResults are set. Strings are immutable objects, so your code would not work.

Module Module1

Sub Main()
    'Declare Variables
    Dim UserAnswer As String = "nothing"
    Dim UserTokens As String
    Dim ThreeResults(2) As String
    Dim Result1 As String
    Dim Result2 As String
    Dim Result3 As String

    'Ask user for number of tokens
    Console.WriteLine("Enter the number of tokens that you want to gamble with (minimum of 1 token)")
    UserTokens = (Console.ReadLine())

    UserTokens = ValidateTokens(UserTokens)

    Do Until UserAnswer = "no"
        ThreeResults = GenerateNumbers()
        Result1 = ThreeResults(0)
        Result2 = ThreeResults(1)
        Result3 = ThreeResults(2)

        UserAnswer = DisplayResults(UserTokens, UserAnswer, Result1, Result2, Result3)
    Loop

End Sub

Function ValidateTokens(ByVal UserTokens)

    Dim dblUserTokens As Double

    Do Until IsNumeric(UserTokens)
        Console.Write("Sorry you did not enter a valid number.  Please try again.   ")
        UserTokens = Console.ReadLine()
    Loop

    'Make sure the user entered in a positive number
    dblUserTokens = CDbl(UserTokens)
    Do Until dblUserTokens > 0
        Console.Write("Sorry you did not enter in a positive number.  Please try again.   ")
        UserTokens = Console.ReadLine()

        'Make sure the user entered in a number
        Do Until IsNumeric(UserTokens)
            Console.Write("Sorry you did not enter a valid number.  Please try again.   ")
            UserTokens = Console.ReadLine()
        Loop
        dblUserTokens = CDbl(UserTokens)


    Loop

    Return UserTokens
End Function

Function GenerateNumbers()
    Dim results(2) As String
    Dim names(5) As String
    Dim x As Integer

    names(0) = "Cherries"
    names(1) = "Oranges"
    names(2) = "Plums"
    names(3) = "Bells"
    names(4) = "Melons"
    names(5) = "Bar"

    For x = 0 To 2
        results(x) = names(CInt(Int((5 * Rnd()) + 1)))
    Next x

    Return results
End Function



Function DisplayResults(ByRef UserTokens, ByVal UserAnswer, ByRef number1, ByRef number2, ByRef number3)
    Console.WriteLine("*** " & number1 & " ** " & number2 & " ** " & number3 & " ***")
    If UserTokens > 0 Then
        Console.WriteLine("You have " & UserTokens & " tokens left, do you want to play again? (yes or no)")
        UserAnswer = (Console.ReadLine())
    Else
        Console.WriteLine("Sorry, you lost all of your tokens!")
    End If

    Return UserAnswer
End Function


End Module

Upvotes: 1

Related Questions