1

さて、私は 0 から 1000 までの 5 または 3 の倍数をすべて取得し、それらの合計を取得する必要があるチャレンジを完了しようとしました。私が解決すべき課題 > 基本は正しいと確信していますが、なぜこのエラーが発生するのかよくわかりません :/.

Module Module1

    Sub Main()
        Dim Counter As Integer = 1
        Dim Numbers() As Integer
        Dim NumbersCounter As Integer = 0
        Dim Total As Integer = 0

        While (Counter <= 1000)

            If (Counter Mod 3 = 0) Then
                Numbers(NumbersCounter) = Counter '<--- The error is located on Numbers.
                NumbersCounter = NumbersCounter + 1
                Counter = Counter + 1

            ElseIf (Counter Mod 5 = 0) Then
                Numbers(NumbersCounter) = Counter
                NumbersCounter = NumbersCounter + 1
                Counter = Counter + 1

            Else
                Counter = Counter + 1
            End If

        End While

        Counter = 0

        While (Counter <= Numbers.Length)
            If (Counter = 0) Then
                Total = Numbers(Counter)
                Counter = Counter + 1
            Else
                Total = Total * Numbers(Counter)
                Counter = Counter + 1
            End If

        End While

        PrintLine(Total)

    End Sub

End Module

どんな助けやヒントも大歓迎です!前もって感謝します。

4

2 に答える 2

1

Numbers 配列にメモリを割り当てる必要があります。サイズは最初にわかっているため、宣言中に割り当てることができます。

整数としての Dim Numbers(1000)

于 2012-07-21T00:19:02.093 に答える
1

コードを見てみると、配列を初期化していないと述べているのは正しいことです。しかし、実行した後、コードを実行するには、コード内の他のいくつかの変更を行う必要がありました。

Module Module1

    Sub Main()
        Dim Counter As Integer = 1
        Dim Numbers(1000) As Integer          'Initialized the Array so it will be usable.
        Dim NumbersCounter As Integer = 0
        Dim Total As Integer = 0

        While (Counter <= 1000)

            If (Counter Mod 3 = 0) Then
                Numbers(NumbersCounter) = Counter 
                NumbersCounter = NumbersCounter + 1
                Counter = Counter + 1

            ElseIf (Counter Mod 5 = 0) Then
                Numbers(NumbersCounter) = Counter
                NumbersCounter = NumbersCounter + 1
                Counter = Counter + 1

            Else
                Counter = Counter + 1
            End If

        End While

        Counter = 0

        While (Counter <= Numbers.Length - 1)  ' Arrays are zero based so you need to subtract 1 from the length or else you will overflow the bounds
            If (Counter = 0) Then
                Total = Numbers(Counter)
                Counter = Counter + 1
            Else
                Total = Total + Numbers(Counter)  'You were multiplying here not adding creating a HUGE number
                Counter = Counter + 1
            End If

        End While

        Console.WriteLine(Total)  'Changed PrintLine which prints to a file to Console.WriteLine which writes to the screen
        Console.ReadLine          'Added a Console.ReadLine so the Window doesn't close until you hit a key so you can see your answer

    End Sub

End Module
于 2012-07-21T05:18:26.663 に答える