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

时间:2010-08-25 18:34:04

标签: vb.net if-statement

下午好,我开始首次尝试编程并决定从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}}的

非常感谢任何见解。

谢谢,

亚历

5 个答案:

答案 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)