2012-09-12 2 views
1

사용자가 입력 한 정수와 코드에 의해 생성 된 난수 간의 숫자 비교를 수행하는 데 문제가 있습니다.VB 2008 (콘솔) "For Each Loop"복권 결과 비교

사용자가 입력 한 각각을 LOTTO 번호와 비교하여 일치하는지 확인해야합니다. 이것을 달성하기 위해 각 for ... 루프를 사용해야합니다.

LOTTO 번호에 대한 7 개의 사용자 입력 정수를 모두 확인한 후에 총 일치 항목 수를 사용자에게 출력해야합니다. 일치하는 항목이 없으면 출력에 "LOOSER!"가 표시되어야합니다.

여기에 제 코드가 있습니다. 저는 현재 비교 부분에만 갇혀 있습니다.이를 위해 각 루프마다 사용해야합니다.

수입 시스템

모듈 로또

Sub Main() 

    'Declaration 
    Dim numbers(6) As Integer 
    Dim IsStarted As Boolean = True 

    'Prompt user to enter 
    Console.WriteLine("Please enter your 7 lucky numbers from 0 - 9 ONLY") 

    'Use Do While Loop to re-iterate the prompts 
    Do While IsStarted 
     For pos As Integer = 0 To 6 
      Console.Write("Enter number {0}: ", pos + 1) 
      'How it stores into an array 
      numbers(pos) = Console.ReadLine() 

      'Check if it is a number: use IsNumberic() 
      If IsNumeric(numbers(pos)) Then 'proceed 
       'Check if it is NOT 0 <x> 9 
       If numbers(pos) < 0 Or numbers(pos) > 9 Then 
        'Don't proceed 
        Console.WriteLine("Invalid Input") 
        IsStarted = True 
        'When any number is invalid, exit the loop 
        Exit For 
       End If 
      End If 
      IsStarted = False 
     Next 
    Loop 

    'Printing out the array. It can also be written as 
    'For pos = LBound(numbers) To UBound(numbers) 
    For pos = 0 To 6 
     Console.Write(numbers(pos) & " ") 
    Next 

    Console.WriteLine() 
    'Random number generator 
    Randomize() 
    Dim random_numbers(6) As Integer 
    Dim upperbound As Integer = 7 
    Dim lowerbound As Integer = 0 
    Dim rnd_number As Double = 0 

    For pos = 0 To 6 
     rnd_number = CInt((upperbound - lowerbound) * Rnd() + lowerbound) 
     random_numbers(pos) = rnd_number 

     Console.Write(random_numbers(pos) & " ") 
    Next 

    'Iterate and compare 
    Dim isSame As Boolean = False 
    Dim pos2 As Integer = 0 
    Dim Counter As Integer = 0 

    'For check = 0 To 6 
    'If numbers(pos2).Equals(random_numbers(pos2)) Then 
    For Each number As Integer In numbers 
     'Console.WriteLine(pos2 + 1 & ":" & number & ":") 
     If number.Equals(random_numbers(pos2)) Then 
      'Console.WriteLine("here is the number that matched:" & number & ":") 
      isSame = True 
      pos2 = pos2 + 1 
     End If 

     For Each num As Integer In random_numbers 
      If random_numbers Is numbers Then 
       Counter = Counter + 1 
      End If 

     Next 
    Next 

    Console.WriteLine() 

    'Display result 
    If isSame = True Then 
     Console.WriteLine("The total numbers of matches are: " & Counter) 
    Else 
     Console.WriteLine("LOOSER!") 
    End If 
    Console.ReadLine() 

End Sub 

학자 인의

+1

그냥 포인트 엔드 모듈 : "패자는"단 하나의 O –

답변

0
  Dim intCursor As Integer = 0 

      For Each intNumber As Integer In numbers 

       'Assumes first user chosen number must equal 
       'the first random number to be considered a match, 
       'the second user number must equal the second random, 
       'etc (Ordering is a factor). 
       If random_numbers(intCursor) = intNumber Then 

        Counter += 1 

       End If 

       intCursor += 1 

      Next 

      If (Counter > 0) Then 

       Console.WriteLine("The total numbers of matches are: " & Counter) 

      Else 

       Console.WriteLine("LOOSER!") 

      End If 
+0

안녕하세요 선생님과 철자, 주셔서 감사합니다 팁, 난 그냥 왜 "인덱스가"random_numbers (intCursor) = intNumber Then "에 대한"배열의 경계를 벗어났다라는 오류가 있는지 알고 싶습니다. – jonathantwm

+0

배열이 0에서 시작될 때 (하한) -1 인덱스를 잡으려고하면 해당 오류가 발생합니다. 배열의 상한값이 6이고 7 번째 인덱스를 잡으려고하면 오류가 발생합니다. – N0Alias

+0

안녕하세요, 코드를 철저히 검사했는데 잘못된 점을 발견하지 못했습니다. 상행을 6으로 변경했습니다. 문제는 실제로 무엇입니까? 저를 도와주세요? – jonathantwm