VB计算器始终显示0,并且if / then / else结果不正确

时间:2016-10-17 20:37:22

标签: vb.net

我试图使用Visual Basic制作完整的计算器,而且我似乎遇到了以下错误。当我点击任何操作按钮时,我从if / 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

1 个答案:

答案 0 :(得分:0)

你的逻辑似乎正好相反。如果在按下操作符时listallhardwareports,则应该给出错误,因为这意味着您已经按下了添加,而不是相反:

add = True

编辑:我认为该检查也可以由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 替换。