Reputation: 872
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
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