1

少し助けが必要です。私のコードは、1つの小さなことを除いて、99%正しく機能しています。

ユーザーが自分で入力するComboBoxからの応答を集計する「カフェテリア調査」と呼ばれるものを作成しています。

ここでの問題は、ComboBoxで選択した数値よりも1少ない数値を集計(*を配置)することです。

最後に+1を追加するSelectedIndex と、*は正しい番号になりますが、#10の応答(ratingComboBox.SelectedIndex)+=1では実行されません。

どんな助けでも素晴らしいでしょう。前もって感謝します。

これが私のコードです:

Public Class CafeteriaSurveyForm

Dim choices As Integer() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim responses(0 To 11) As Integer
Dim responseCounter As Integer = 0

' displays histogram
Sub DisplayHistogram()

    outputTextBox.Text = ("Rating" & vbTab & "Frequency")

    For i As Integer = 0 To choices.GetUpperBound(0)
        For ii As Integer = 1 To responses(i)
            outputTextBox.Text &= ("*")
        Next
        outputTextBox.Text &= (vbNewLine & choices(i) & vbTab)
    Next


End Sub ' DisplayHistogram

Private Sub CafeteriaSurveyForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    ratingComboBox.DataSource = choices
End Sub

Private Sub submitButton_Click(sender As System.Object, e As System.EventArgs) Handles submitButton.Click
    responseCounter += 1

    responses(ratingComboBox.SelectedIndex) += 1

    DisplayHistogram()

End Sub

End Class ' CafeteriaSurveyForm
4

3 に答える 3

1

表示機能が少し遅れています。これがあなたが今持っているものです:

For i As Integer = 0 To choices.GetUpperBound(0)
    For ii As Integer = 1 To responses(i)
        outputTextBox.Text &= ("*")
    Next
    outputTextBox.Text &= (vbNewLine & choices(i) & vbTab)
Next

ループごとに、前の行にアスタリスクが書き込まれます(新しい行は後に行われるため)。選択したインデックスを増やすと、正しい場所に書き込まれますが、チャンスを得る前にforループを終了したため、#10のアスタリスクを書き込むことはできませんでした。

これはそれがどうあるべきかです:

For i As Integer = 0 To choices.GetUpperBound(0)
    outputTextBox.Text &= (vbNewLine & choices(i) & vbTab)
    For ii As Integer = 1 To responses(i)
        outputTextBox.Text &= ("*")
    Next
Next

あるいは

For i As Integer = 0 To choices.GetUpperBound(0)
    outputTextBox.Text &= vbNewLine & choices(i) & vbTab & New String("*", responses(i))

Next

これで、選択肢と応答の配列は同じインデックスを使用して同期され、同じループの反復中にアクセスされます。

于 2012-10-23T05:52:27.330 に答える
0

おそらくエラーは、Responses(i)が1から11の範囲の整数として定義されていることです。その範囲が含まれていない場合、応答10に対してResponses(i)を1インクリメントすると、その範囲から外れます。

于 2012-10-23T01:36:19.883 に答える
0

これを試して、期待どおりの出力が得られるかどうかを確認してください。

  1. 変数を削除しresponseCounterます。それは重要なことは何もしません(とにかく私が見るものは何もありません)。

  2. responses宣言をに変更しDim responses(9) As Integerます。
    VB.NETは、配列(および他のほとんどすべての種類のコレクション)の下限としてゼロ(0)を使用するため、ステートメントは10個の要素を持つ整数の配列を作成します。

  3. For ii As Integer = 1 to responses(i)ループブロックをに変更しますoutputTextBox.Text &= New String('*', responses(i))

于 2012-10-23T03:18:14.493 に答える