用VB.Net编写此循环的最有效方法

用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)

大家下午好,我开始了我的第一次编程尝试,并决定从VB.net开始,因为我可以通过MS Dreamspark程序免费获得VS2010 professional

我一直在网上学习一些基本教程,现在正在编写一个小程序,运行一个循环,将用户输入的两个数字相加

以下是我编写的代码:

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)