下午好,我开始首次尝试编程并决定从VB.net开始,因为我可以通过MS Dreamspark程序免费获得VS2010专业版。
我一直在线学习一些基础教程,现在正在编写一个小程序,它运行一个循环,将所有数字加在用户输入的两个数字之间。
以下是我写的代码:
Public Class Form1
Private Sub cmdAddNumbers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAddNumbers.Click
Dim NumberOne As Integer
Dim NumberTwo As Integer
Dim Result As Integer
Dim i As Integer
If Not IsNumeric(txtNumberOne.Text) Then
MsgBox("Please Enter A Valid Number For Number One")
txtNumberOne.Clear()
Exit Sub
ElseIf txtNumberOne.Text = 0 Then
MsgBox("Please Enter A Valid Number For Number One")
txtNumberOne.Clear()
Exit Sub
ElseIf txtNumberOne.Text > 0 And IsNumeric(txtNumberOne.Text) Then
NumberOne = txtNumberOne.Text
End If
If Not IsNumeric(txtNumberTwo.Text) Then
MsgBox("Please Enter A Valid Number For Number Two")
txtNumberTwo.Clear()
Exit Sub
ElseIf txtNumberTwo.Text < NumberOne Then
MsgBox("Please Enter A Valid Number For Number Two")
txtNumberTwo.Clear()
Exit Sub
ElseIf txtNumberTwo.Text > NumberOne And IsNumeric(txtNumberTwo.Text) Then
NumberTwo = txtNumberTwo.Text
End If
For i = NumberOne To NumberTwo
Result = Result + i
Next i
txtResult.Text = Result
txtNumberOne.Clear()
txtNumberTwo.Clear()
End Sub
End Class
现在,我想知道我是否编写了最高效的If语句来执行此代码,或者是否可以使用AND
/ OR
语句编写任何更简单的语句来删除部分{{ 1}}的
非常感谢任何见解。
谢谢,
亚历
答案 0 :(得分:2)
您应该首先将Option Strict On
放在代码顶部,以强制自己编写代码,而不会在字符串和数字之间进行隐式转换。代码中存在缺陷的一个示例是将字符串值txtNumberTwo.Text
与数值NumberOne
进行比较;如果将字符串转换为数字以使比较正常工作,或者将数字转换为字符串以便进行字符串比较,则不明显。
您可以使用Int32.TryParse
方法仅解析一次,而不是三次:
Dim numberOne As Integer
Dim numberTwo As Integer
Dim result As Integer
If Not Int32.TryParse(txtNumberOne.Text, numberOne) Then
MsgBox("Please Enter A Valid Number For Number One")
txtNumberOne.Clear()
Exit Sub
ElseIf numberOne <= 0 Then
MsgBox("Please Enter A Valid Number For Number One")
txtNumberOne.Clear()
Exit Sub
End If
If Not Int32.TryParse(txtNumberTwo.Text, numberTwo) Then
MsgBox("Please Enter A Valid Number For Number Two")
txtNumberTwo.Clear()
Exit Sub
ElseIf numberTwo < numberOne Then
MsgBox("Please Enter A Valid Number For Number Two")
txtNumberTwo.Clear()
Exit Sub
End If
根本不需要你的循环。您可以直接计算总和:
Result = (numberOne + numberTwo) * (numberTwo + 1 - numberOne) / 2
答案 1 :(得分:1)
怎么样:
If Not IsNumeric(txtNumberOne.Text) Or txtNumberOne.Text <= 0 Then
MsgBox("Please Enter A Valid Number For Number One")
txtNumberOne.Clear()
Exit Sub
Else
NumberOne = txtNumberOne.Text
End If
If Not IsNumeric(txtNumberTwo.Text) Or txtNumberTwo.Text < NumberOne Then
MsgBox("Please Enter A Valid Number For Number Two")
txtNumberTwo.Clear()
Exit Sub
Else
NumberTwo = txtNumberTwo.Text
End If
请注意,如果NumberOne
等于Textbox2.Text
,则永远不会分配NumberTwo
答案 2 :(得分:0)
If Not IsNumeric(txtNumberOne.Text) Then
MsgBox("Please Enter A Valid Number For Number One")
txtNumberOne.Clear()
Exit Sub
ElseIf txtNumberOne.Text = 0 Then
MsgBox("Please Enter A Valid Number For Number One")
txtNumberOne.Clear()
Exit Sub
ElseIf txtNumberOne.Text > 0 And IsNumeric(txtNumberOne.Text) Then
NumberOne = txtNumberOne.Text
End If
第三个If是超级好的。我们知道它必须是IsNumeric,因为它传递了第一个If,并且我们知道它不能为0,因为它传递了第二个If。 (如果碰巧是负面的话,你也根本不做任何补贴)
现在,自从我上次使用VB.Net以来已经有一段时间了,但我很确定它在字符串和放大器之间仍有明显区别。整数,这意味着txtNumberOne.Text = 0
甚至不应该编译。
而且,为什么让你的用户猜出“有效数字”是什么?
Dim numberOne as Integer
If IsNumeric(txtNumberOne.Text) Then
numberOne = CInt(txtNumberOne.Text)
else
numberOne = -1;
End If
If numberOne < 1
MsgBox("Please Enter A Positive Number For Number One")
txtNumberOne.Clear()
Exit Sub
End If
答案 3 :(得分:0)
我认为最好的解决方案就是将文本框设置为只能接受数字,这样就可以避免所有检查,如果文本是数字或不是数字,只检查它是否大于零。
将文本框设置为仅接受数字复制此功能:
Private Function TrapKey(ByVal KCode As String) As Boolean
If (KCode >= 48 And KCode <= 57) Or KCode = 8 Then
TrapKey = False
Else
TrapKey = True
End If
End Function
并在文本框的按键事件中添加
e.Handled = TrapKey(Asc(e.KeyChar))
答案 4 :(得分:0)
Dim doub As Double
If Not (Double.TryParse(txtNumberOne.Text, doub) AndAlso doub > 0) Then
MsgBox("Please Enter A Valid Number For Number One")
txtNumberOne.Clear()
Else
NumberOne = doub
End If
If Not (Double.TryParse(txtNumberTwo.Text, doub) AndAlso doub > 0) Then
MsgBox("Please Enter A Valid Number For Number Two")
txtNumberTwo.Clear()
Else
NumberTwo = doub
End If
我认为这就是你要找的东西
Result = (NumberTwo * (NumberTwo + 1) / 2) - ((NumberOne - 1) * (NumberOne) / 2)