用VB.Net编写此循环的最有效方法
大家下午好,我开始了我的第一次编程尝试,并决定从VB.net开始,因为我可以通过MS Dreamspark程序免费获得VS2010 professional 我一直在网上学习一些基本教程,现在正在编写一个小程序,运行一个循环,将用户输入的两个数字相加 以下是我编写的代码:用VB.Net编写此循环的最有效方法,vb.net,if-statement,Vb.net,If Statement,大家下午好,我开始了我的第一次编程尝试,并决定从VB.net开始,因为我可以通过MS Dreamspark程序免费获得VS2010 professional 我一直在网上学习一些基本教程,现在正在编写一个小程序,运行一个循环,将用户输入的两个数字相加 以下是我编写的代码: Public Class Form1 Private Sub cmdAddNumbers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
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
公共类表单1
私有子cmdAddNumbers\单击(ByVal发送者作为System.Object,ByVal e作为System.EventArgs)处理cmdAddNumbers。单击
作为整数的Dim NumberOne
作为整数的Dim NumberTwo
将结果设置为整数
作为整数的Dim i
如果不是数字(txtNumberOne.Text),则
MsgBox(“请为数字1输入有效数字”)
txtNumberOne.Clear()
出口接头
ElseIf txtNumberOne.Text=0则
MsgBox(“请为数字1输入有效数字”)
txtNumberOne.Clear()
出口接头
如果txtNumberOne.Text>0且为数字(txtNumberOne.Text),则
NumberOne=txtNumberOne.Text
如果结束
如果不是数字(txtNumberTwo.Text),则
MsgBox(“请为数字2输入有效数字”)
txtNumberTwo.Clear()
出口接头
ElseIf txtNumberTwo.TextNumberOne和IsNumeric(txtNumberTwo.Text),则
NumberTwo=txtNumberTwo.Text
如果结束
对于i=编号one到编号wo
结果=结果+i
接下来我
Text=Result
txtNumberOne.Clear()
txtNumberTwo.Clear()
端接头
末级
现在,我想知道我是否已经编写了执行此代码的最有效的if语句,或者是否可以使用和
/或
语句编写更简单的if语句来删除一些ElseIf
非常感谢您的任何见解
谢谢,
亚历克斯那么:
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
如果不是数字(txtNumberOne.Text)或txtNumberOne.Text
第三个If是superflious。我们知道它必须是IsNumeric,因为它通过了第一个If,我们知道它不能是0,因为它通过了第二个If。(如果正好是负值,您也不做任何考虑)
现在,我已经有一段时间没有上一次使用VB.Net了,但是我很确定它在字符串和整数之间仍然有一个明显的区别,这意味着txtNumberOne.Text=0
甚至不应该编译
还有,为什么你要让你的用户猜“有效数字”是什么
Dim numberOne作为整数
如果是数字(txtNumberOne.Text),则
numberOne=CInt(txtNumberOne.Text)
其他的
numberOne=-1;
如果结束
如果numberOne<1
MsgBox(“请为数字1输入正数”)
txtNumberOne.Clear()
出口接头
如果结束
您应该首先在代码顶部添加选项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
我认为最好的解决方案就是将文本框设置为只能接受数字,这样就可以避免所有文本是否为数字的检查,并且只检查文本是否大于零
要将文本框设置为仅接受数字,请复制此函数:
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
我想这就是你要找的
Result = (NumberTwo * (NumberTwo + 1) / 2) - ((NumberOne - 1) * (NumberOne) / 2)
当严格模式关闭时,它会编译。当你比较一个字符串和一个数字时,其中一个会被隐式转换,这样比较就完成了,但是不能确定它是否会进行你认为的转换。。。
Result = (numberOne + numberTwo) * (numberTwo + 1 - numberOne) / 2
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))
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)