1

我需要一点帮助。除了一件小事之外,我的代码 99% 都可以正常工作。

我正在制作所谓的“自助餐厅调查”,它记录来自用户自己输入的组合框的响应。

这里的问题是它计算(放置 *)数字 1 比我在 ComboBox 中选择的数字少。

如果我在它的末尾添加 + 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

对于每个循环,它都将星号写入前一行(因为新行是在之后完成的)。如果您增加选定的索引,它会将它们写入正确的位置,但永远不必为#10 写入星号,因为它在有机会之前就退出了 for 循环。

这应该是:

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

试试这个,看看它是否能给你预期的输出。

  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 回答
0

也许错误在于 Responses(i) 被定义为 1 到 11 范围内的整数。如果该范围不包括在内,那么当您为响应 10 将 Responses(i) 增加 1 时,您将超出该范围。

于 2012-10-23T01:36:19.883 回答