2016-10-17 66 views
-1

我想使用Visual Basic制作一个完整的计算器,而且我似乎遇到了以下错误。当我点击任何操作按钮时,我会从if/then/else语句中得到错误的结果。而不是分配所有的布尔值等,它给我的错误消息,只是应该出现与用户错误,即击中一个操作两次等。在评论这个部分后,我发现了另一个错误,等于后答案总是零,我不确定为什么。谢谢您的帮助。VB计算器始终显示0,如果/ then/else结果不正确

Public Class frmCalc 
    Dim num1 As Decimal = 0 
    Dim num2 As Decimal = 0 
    Dim answer As Decimal = 0 
    Dim cnt As Integer = 10 
    Dim add As Boolean = False 
    Dim mult As Boolean = False 
    Dim div As Boolean = False 
    Dim subt As Boolean = False 
    Dim second As Boolean = False 
    Dim dec As Boolean = False 
    Dim crash As String = "Error!" 
    Dim uCrash As String = "User Error." 
    Dim first As Boolean = True 
    Public Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click 
     If dec = False Then 
      If first = True Then 
       num1 = (num1 * 10) + 1 
      ElseIf second = True Then 
       num2 = (num2 * 10) + 1 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
     ElseIf dec = True Then 
      If first = True Then 
       num1 = num1 + (1/cnt) 
      ElseIf second = True Then 
       num2 = num2 + (1/cnt) 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
      cnt *= 10 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click 
     If dec = False Then 
      If first = True Then 
       num1 = (num1 * 10) + 2 
      ElseIf second = True Then 
       num2 = (num2 * 10) + 2 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
     ElseIf dec = True Then 
      If first = True Then 
       num1 = num1 + (2/cnt) 
      ElseIf second = True Then 
       num2 = num2 + (2/cnt) 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
      cnt *= 10 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btn3_Click(sender As Object, e As EventArgs) Handles btn3.Click 
     If dec = False Then 
      If first = True Then 
       num1 = (num1 * 10) + 3 
      ElseIf second = True Then 
       num2 = (num2 * 10) + 3 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
     ElseIf dec = True Then 
      If first = True Then 
       num1 = num1 + (3/cnt) 
      ElseIf second = True Then 
       num2 = num2 + (3/cnt) 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
      cnt *= 10 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click 
     If (add = True) Or (subt = True) Or (mult = True) Or (div = True) Then 
      add = True 
      subt = False 
      mult = False 
      div = False 
      dec = False 
      first = False 
      second = True 
      cnt = 10 
     Else 
      MessageBox.Show(uCrash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btn4_Click(sender As Object, e As EventArgs) Handles btn4.Click 
     If dec = False Then 
      If first = True Then 
       num1 = (num1 * 10) + 4 
      ElseIf second = True Then 
       num2 = (num2 * 10) + 4 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
     ElseIf dec = True Then 
      If first = True Then 
       num1 = num1 + (4/cnt) 
      ElseIf second = True Then 
       num2 = num2 + (4/cnt) 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
      cnt *= 10 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btn5_Click(sender As Object, e As EventArgs) Handles btn5.Click 
     If dec = False Then 
      If first = True Then 
       num1 = (num1 * 10) + 5 
      ElseIf second = True Then 
       num2 = (num2 * 10) + 5 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
     ElseIf dec = True Then 
      If first = True Then 
       num1 = num1 + (5/cnt) 
      ElseIf second = True Then 
       num2 = num2 + (5/cnt) 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
      cnt *= 10 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btn6_Click(sender As Object, e As EventArgs) Handles btn6.Click 
     If dec = False Then 
      If first = True Then 
       num1 = (num1 * 10) + 6 
      ElseIf second = True Then 
       num2 = (num2 * 10) + 6 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
     ElseIf dec = True Then 
      If first = True Then 
       num1 = num1 + (6/cnt) 
      ElseIf second = True Then 
       num2 = num2 + (6/cnt) 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
      cnt *= 10 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btnMult_Click(sender As Object, e As EventArgs) Handles btnMult.Click 
     If (add = True) Or (subt = True) Or (mult = True) Or (div = True) Then 
      add = False 
      subt = False 
      mult = True 
      div = False 
      dec = False 
      second = True 
      cnt = 10 
     Else 
      MessageBox.Show(uCrash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btn7_Click(sender As Object, e As EventArgs) Handles btn7.Click 
     If dec = False Then 
      If first = True Then 
       num1 = (num1 * 10) + 7 
      ElseIf second = True Then 
       num2 = (num2 * 10) + 7 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
     ElseIf dec = True Then 
      If first = True Then 
       num1 = num1 + (7/cnt) 
      ElseIf second = True Then 
       num2 = num2 + (7/cnt) 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
      cnt *= 10 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btn8_Click(sender As Object, e As EventArgs) Handles btn8.Click 
     If dec = False Then 
      If first = True Then 
       num1 = (num1 * 10) + 8 
      ElseIf second = True Then 
       num2 = (num2 * 10) + 8 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
     ElseIf dec = True Then 
      If first = True Then 
       num1 = num1 + (8/cnt) 
      ElseIf second = True Then 
       num2 = num2 + (8/cnt) 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
      cnt *= 10 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btn9_Click(sender As Object, e As EventArgs) Handles btn9.Click 
     If dec = False Then 
      If first = True Then 
       num1 = (num1 * 10) + 9 
      ElseIf second = True Then 
       num2 = (num2 * 10) + 9 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
     ElseIf dec = True Then 
      If first = True Then 
       num1 = num1 + (9/cnt) 
      ElseIf second = True Then 
       num2 = num2 + (9/cnt) 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
      cnt *= 10 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btnDiv_Click(sender As Object, e As EventArgs) Handles btnDiv.Click 
     If (add = True) Or (subt = True) Or (mult = True) Or (div = True) Then 
      add = False 
      subt = False 
      mult = False 
      div = True 
      dec = False 
      second = True 
      cnt = 10 
     Else 
      MessageBox.Show(uCrash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btnDec_Click(sender As Object, e As EventArgs) Handles btnDec.Click 
     dec = True 
    End Sub 

    Public Sub btn0_Click(sender As Object, e As EventArgs) Handles btn0.Click 
     If dec = False Then 
      If first = True Then 
       num1 = (num1 * 10) 
      ElseIf second = True Then 
       num2 = (num2 * 10) 
      Else 
       MessageBox.Show(crash) 
       Application.Exit() 
      End If 
     ElseIf dec = True Then 
      cnt *= 10 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btnEquals_Click(sender As Object, e As EventArgs) Handles btnEquals.Click 
     If add = True Then 
      answer = num1 + num2 
     ElseIf subt = True Then 
      answer = num1 - num2 
     ElseIf div = True Then 
      answer = num1/num2 
     ElseIf mult = True Then 
      answer = num1 * num2 
     Else 
      MessageBox.Show(uCrash) 
      Application.Exit() 
     End If 
     MessageBox.Show(answer) 
     num1 = answer 
     num2 = 0 
     first = False 
     second = False 
     dec = False 
    End Sub 

    Public Sub btnSub_Click(sender As Object, e As EventArgs) Handles btnSub.Click 
     If (add = True) Or (subt = True) Or (mult = True) Or (div = True) Then 
      add = False 
      subt = True 
      mult = False 
      div = False 
      dec = False 
      second = True 
      cnt = 10 
     Else 
      MessageBox.Show(uCrash) 
      Application.Exit() 
     End If 
    End Sub 

    Public Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click 
     num1 = 0 
     num2 = 0 
     answer = 0 
     cnt = 10 
     first = True 
     second = False 
     mult = False 
     add = False 
     subt = False 
     div = False 
     dec = False 
    End Sub 

    Public Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click 
     If first = True Then 
      num1 = num1 - (num1 Mod 10) 
     ElseIf second = True Then 
      num2 = num2 - (num2 Mod 10) 
     Else 
      MessageBox.Show(crash) 
      Application.Exit() 
     End If 
    End Sub 

End Class 
+0

减少代码并保持例如只有一个数字,一个操作符和相等按钮不会有什么坏处。在你的代码中有大约50个(猜测)'If',你甚至不会突出显示导致问题的一个。 – arcadeprecinct

回答

0

你的逻辑似乎颠倒了。

If (add = True) Or (subt = True) Or (mult = True) Or (div = True) Then 
     MessageBox.Show(uCrash) 
     Application.Exit() 
    Else 
     add = False 
     subt = False 
     mult = False 
     div = True 
     dec = False 
     second = True 
     cnt = 10 
    End If 

编辑:我认为,支票可以通过(second=true)更换,太如果add = True当按下操作,它应该,因为这意味着你已经按添加,而不是其他的方式给出一个错误。