2012-02-27 46 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