所以任务是: 编写包含文本框,列表框和命令按钮的程序。在文本框上方放置一个标签,告诉用户在文本框内键入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
结束班
答案 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