2012-02-27 48 views
0

非常新的Visual Studio 2010有接近如果语句和调试

对于我的课堂混乱,我需要一个计算器。对这个问题的要求是,如果A或B为零,那么程序不会实际计算A或B;相反,程序会将不为零的变量值赋给eh结果,如果它们都为零,那么只需将答案设为零。

这里是我的代码:

Public Class Form1 


    Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click 

     Dim A As Decimal 
     Dim B As Decimal 
     Dim Result As Decimal 

     A = ABox.Text 
     B = BBox.Text 

     A = Decimal.Parse(ABox.Text) 
     B = Decimal.Parse(BBox.Text) 

     If (ABox.Text = 0) Then 

      ResultLabel.Text = BBox.Text 

     End If 

     If (BBox.Text = 0) Then 

      ResultLabel.Text = ABox.Text 

     End If 

     If (BBox.Text = 0 And ABox.Text = 0) Then 

      ResultLabel.Text = 0 

     End If 

     Result = A + B 

     ResultLabel.Text = Result.ToString("N2") 

    End Sub 

我的问题如下:

  1. 是if语句好这一点,或将try/catch语句是更好?
  2. 由于答案会自动正确的,即使代码不正确(例如9 + 0将是9不管,不管是不是IF或try/catch语句的实际工作),他们关键的是正确的一步一步调试。什么是最佳的方式来做到这一点?我有一个菜单一步一步地显示了程序的功能,但由于某种原因,我似乎无法在关闭它之后找到窗口。当我用断点进行调试时,我想一步一步地看到它。

良好的语法为这些类型的条件运算符的任何其他提示吗?

对不起,听起来愚蠢的;我无法在这里找到涵盖这类问题的主题。

+0

为什么要麻烦?如果A = 0,则A + B = B;如果B = 0,则A + B = A;如果两者都为0,则A + B = 0。换句话说,你可以计算出A + B和该死的条件的东西。 – cHao 2012-02-27 03:09:56

+0

这是更好? 如果(A = 0),那么 ResultLabel.Text = B 结束如果 如果(B = 0 )Then ResultLabel.Text = A End If 如果(BBox.Text = 0和ABox.Text = 0),那么 ResultLabel.Text = 0 结束如果 – user1234703 2012-02-27 04:11:06

+0

还有,我将如何去寻找一步一步的调试准确地找到了程序正在输出每一步的方式?我在这里先向您的帮助表示感谢! – user1234703 2012-02-27 04:11:40

回答

1

OK ......第一关,你并不真正需要的If s的一切。 (加的标识属性:对于任何xx + 0 = x)这是将要发生的事情发生之前,你甚至得到他们的任何错误,所以你做的唯一事情是说,如果ABox解析零和BBox的值是“5.000000”,所有这些零将被复制到结果中。同样,如果这些箱子倒过来。

此外,如果您使用Decimal.TryParse而不是Decimal.Parse,输入框中的不带号码的东西不会杀死您的程序。它们只会变成0

你会得到类似的结果(减去多余的零),还有一些类似的代码

Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click 
    Dim A as Decimal, B as Decimal 
    Decimal.TryParse(ABox.Text, A) 
    Decimal.TryParse(BBox.Text, B) 
    ResultBox.Text = (A + B).ToString("N2") 
End Sub 

如果由于某种原因蠢你真的,真的,真的需要所有如果废话,你将要使用ElseIf,以确保默认情况下无法运行。

Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click 
    Dim A as Decimal 
    Dim B as Decimal 
    Decimal.TryParse(ABox.Text, A) 
    Decimal.TryParse(BBox.Text, B) 
    If A = 0 then 
     ResultBox.Text = BBox.Text 
    ElseIf B = 0 then 
     ResultBox.Text = ABox.Text 
    Else 
     Dim result as Decimal = A + B 
     ResultBox.Text = result.ToString("N2") 
    End If 
End Sub 

但它是一种浪费 - 更糟糕的是,如果重点是添加两个数字,这是不正确的。有人可以把“我喜欢奶酪”放在第一个盒子里,“YAAAAAAAAY !!!”在另一个,结果将是“YAAAAAAAAY !!!”。显然不会发生什么。

Private Sub AddBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
Handles AddButton.Click 
    Dim A as Decimal 
    Dim B as Decimal 
    Try 
     A = Decimal.Parse(ABox.Text) 
     B = Decimal.Parse(BBox.Text) 
     ResultBox.Text = (A + B).ToString("N2") 
    Catch ex as FormatException 
     MessageBox.Show("Exactly two numbers (one per box), please!") 
    End Try 
End Sub 

但我讨厌这样做的用户输入。你应该预计用户是恶意和/或愚蠢的,并指望他们尽其一切可以搞砸你的应用程序。这会在以后节省您大量的调试时间。但是,如果我们假设最糟糕的,是畸形的输入真的一个特殊的条件?我拒绝。 (其他人可能不同意,但他们错了:))

如果你想通知用户输入错误,Decimal.TryParse也返回一个布尔值(真/假),说明它是否成功。如果失败了,你可以显示一条消息告诉用户退出是一个白痴。 (稍微有点外交,如果你想要的话)。


第二...转到Option Strict就可以了。请。所有这些隐含的演员都给了我意志。请注意,这可能会将十几个错误添加到您的列表中......但这是一个好的的事情。一个人应该知道,当他们试图把一个数字放在一个字符串变量中时,会发生很多魔术(我认为)人们需要更多地注意。 K,现在,至于调试...如果你已经遵循我的建议到这一点,你应该不需要调试。异常消失了,代码在编译之前会更加正确。但是,如果你仍然需要,一步一步地完成程序,就是在Function行本身或者第一行不是声明的地方设置一个断点。 (点击行旁边的左边空白处,红色的小球应该出现在你点击的地方的空白处,这可以让你知道那里有一个断点。)你也可以尝试在声明上设置一个断点,但是我似乎请记住,使断点处于实际执行某些操作的下一行,或者在函数的开始处。我忘了这个,并没有在这台机器上的VS来检查。)

当你从VS运行程序时,程序将启动,当它遇到断点时,VS会弹出回到前台黄色的箭头是红色的球。该黄色箭头指向要执行的下一行。从那里,你可以使用调试工具栏(看你的工具栏;你应该有额外的按钮,我认为蓝色,看起来像播放/停止/等按钮)来逐步通过代码。您还应该看到标有“本地人”,“手表”以及您期望在有价值的调试器中看到的其他窗口的窗口。 :)

请注意,尽管程序停止在断点处,或者逐句通过代码,应用程序将显示为冻结。用户界面更新可能不会立即显示,因此,您将无法在输入框中输入任何内容,或者直到您恢复(直接点击“播放”按钮)按钮。

+0

非常感谢你的非常详细和真棒回应! – user1234703 2012-02-27 20:54:47