0

私は配列をランダム化したので、クイズが再生されるたびに質問が異なる順序で表示されますが、質問を繰り返すことができなかった場合はそれを好むでしょう.

これが私のアレイのセットアップ方法です:

Function loadQuestions()

    Questions(0).Question = "Which of these words are an adjective?"
    Questions(0).option1 = "Dog"
    Questions(0).option2 = "Beautiful"
    Questions(0).option3 = "Steven"
    Questions(0).option4 = "Bird"
    Questions(0).Answer = "B"

    Questions(1).Question = "What's the adjective in this sentence:" & vbCrLf & "'Kelly handled the breakable glasses very carefully'"
    Questions(1).option1 = "Kelly"
    Questions(1).option2 = "Handled"
    Questions(1).option3 = "Carefully"
    Questions(1).option4 = "Breakable"
    Questions(1).Answer = "D"
    ...

これは、クイズの開始時に質問を呼び出す関数です。

Function GetQuestion(ByVal intQuestion As Integer)

    tmrOne.Start()

    If questionNumber < 11 Then
        lblQuestionNumber.Text = "Question" & " " & questionNumber
        Dim questionChosen As Integer
        questionChosen = random.Next(25)
        lblQuestion.Text = Questions(questionChosen).Question
        btnAnswerA.Text = Questions(questionChosen).option1
        btnAnswerB.Text = Questions(questionChosen).option2
        btnAnswerC.Text = Questions(questionChosen).option3
        btnAnswerD.Text = Questions(questionChosen).option4
        strAnswer = Questions(questionChosen).Answer

        questionNumber = questionNumber + 1
        btnAnswerA.BackColor = Color.White
        btnAnswerB.BackColor = Color.White
        btnAnswerC.BackColor = Color.White
        btnAnswerD.BackColor = Color.White
        btnAnswerA.Enabled = True
        btnAnswerB.Enabled = True
        btnAnswerC.Enabled = True
        btnAnswerD.Enabled = True
        Return intQuestion
    Else
        MsgBox("You have finished")
        End
    End If

End Function

これに役立つものをインターネットで見つけようとしましたが、これに慣れていないため、成功していないか、理解していません。ArrayList.RemoveAt を見つけましたが、それが配列で使用する正しい構文かどうかわかりませんか?

では、配列が既に尋ねられた後に質問を繰り返さないようにするにはどうすればよいでしょうか? それらを別の配列に入れますか?

どんな助けでも大歓迎です!

4

1 に答える 1

1

あなたの質問からわかるように、あなたはArrayList. その場合、はい、RemoveAtオプションは最良の代替手段として聞こえます. 純粋な配列 (例: ) は;Dim Questions() As Stringの最も効率的な型であることに注意してください。/Collectionの主な利点は、要素の追加/削除がいかに簡単かということです。そのため、ArrayList を使用すると、その定義機能の 1 つを最大限に活用できます。ListsArrayLists

特定のケースでの追加の利点は、アイテムを削除するたびに、その位置が満たされる (そしてアイテムの総数が減少する) ことです。したがって、乱数ジェネレーターの最大値を現在のインデックス数に更新するだけです (最初のインデックスがゼロであるため、要素ではありません)。

要約すると、コードを次のように変更すると、必要なものが得られます。

If(Questions.Count > 0) Then
    questionChosen = random.Next(0, Questions.Count - 1)
End If

そして、あなたがそれを終えたら:

If(questionChosen >= 0 And questionChosen <= Questions.Count - 1) Then
    Questions.RemoveAt(questionChosen)
End If
于 2013-08-25T09:42:05.807 に答える