为什么我的VB代码不起作用?

时间:2013-04-30 13:56:29

标签: vb.net

所以任务是: 编写包含文本框,列表框和命令按钮的程序。在文本框上方放置一个标签,告诉用户在文本框内键入1到10之间的数字。当用户单击命令按钮时,请在文本框中选中有效数字,如果数字不在预期范围内或空输入,则发出错误消息框。如果用户输入了有效数字,则将其分配给整数变量n并使用For ... Next循环来累积使用语句Dim numList()声明的数组的前n个元素的总和为Integer = {2, 4,10,5,6,8,9,3,2,4}在列表框中显示总和。

Private Sub bCom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bCom.Click
    Dim n As Integer = CInt(tNum.Text)

    If CDbl(tNum.Text) > 10 Then
        MessageBox.Show("Please Enter a Number from 1 to 10")
        tNum.Focus()
    End If

    Dim numList() As Integer = {2, 4, 10, 5, 6, 8, 9, 3, 2, 4}
    Dim sum As Integer
    For Each n As Integer In numList
        sum += n
    Next

    lOut.Items.Add(sum)
End Sub

结束班

3 个答案:

答案 0 :(得分:1)

您正在使用for each循环而不是for循环,因此您遍历数组中的每个元素,而不仅仅是第一个n循环。

你应该使用类似的东西:

For x = 0 To n - 1 
    sum += numList(x)
Next

还有一些问题:

  • 如果您已将文本转换为之前的整数,则无需将文本转换为double。

  • 如果用户输入的内容不是数字,则应使用Int32.TryParse

  • 您只需检查数字是否大于10,但如果小于1则不会。

  • 如果号码无效,您会向用户显示一条消息,然后您继续, 但你应该退出你的方法

答案 1 :(得分:0)

如果我理解你的问题,你想要对数组numList的前n位数求和 如果是这种情况,那么您需要以这种方式更改循环代码

For x = 0 To n -1 
    sum += numList(x)
Next

使用x作为numList数组的索引器,从数组的第一个元素开始(x = 0),当索引器达到n - 1的值时停止

通过这种方式,您可以完全满足他们的要求 如果您希望在没有明确循环的情况下使用LinQ也可以显示优雅的方法

sum = numList.Take(n).Sum()

但是,在花哨之前,最好删除代码中的一些明显错误

if Not Int32.TryParse(tNum.Text, n) Then
     MessageBox.Show("Error......")
     tNum.Focus()
     Return
End If

if n < 1 OrElse n > 10 Then
     MessageBox.Show("Error......")
     tNum.Focus()
     Return
End if

并且不要使用像CInt e CDbl这样只保留与VB6兼容的旧式功能。使用最新的方法,如Int32.TryParse,Convert.ToInt32等...

答案 2 :(得分:0)

正如其他人所说,你需要一个索引的For..Loop,而不是一个ForEach循环。 您也可以考虑将“它是一个有效数字”逻辑移动到单独的函数中。

Public Class Form1

    Private Sub btnCompute_Click(sender As System.Object, e As System.EventArgs) Handles btnCompute.Click
        'is the number valid?
        Dim n As Integer = -1
        If IsInputValid(txbInput.Text, n) Then
            Dim sum As Integer = 0

            'declare an array of numbers
            Dim numList() As Integer = {2, 4, 10, 5, 6, 8, 9, 3, 2, 4}

            'accumulate the sum of the first N elements of the array
            For i As Integer = 0 To n - 1
                sum += numList(i)
            Next

            'refresh the listbox with the sum
            lbxOutput.Items.Clear()
            lbxOutput.Items.Add(sum.ToString)
        Else
            MessageBox.Show("Please enter a number between 1 and 10")
        End If
    End Sub

    Private Function IsInputValid(input As String, ByRef validnumber As Integer) As Boolean
        'input must be a number between 1 and 10
        'if it is valid, assign it to the byref validNumber parameter.
        Dim i As Integer = -1
        If Integer.TryParse(input, i) Then
            If i >= 1 AndAlso i <= 10 Then
                validnumber = i
                Return True
            End If
        End If
        validnumber = i
        Return False
    End Function
End Class