【问题标题】:Keep on Calculating in Calculator继续在计算器中计算
【发布时间】:2013-11-20 18:36:17
【问题描述】:

我正在用 VB.Net 做一个简单的计算器

我正在扩展代码,因为我想要这样,如果你做这样的操作

input(8) input(+) input(2) input(=) result(10)

但是如果我按下除号按钮和其他数字,我希望这样:

 previousResult(10) input(/) input(5) input(=) newResult(2)

另外,如果我不时按相等运算符继续进行计算 它还应该给出正确的值

input(8) input(+) input(2) input(/) input(2) input(+) input(5) input(=) result(10)

无论计算多少次新操作,它都应该一直持续下去。 无论我点击哪个运算符(+、-、/、*),它都应该一直持续下去

我已经做了很多变量和函数,整个事情都是一团糟。 我的第一个计算将使用 case +

但是对于另一种情况+结果是错误的......这是我的代码:

Option Strict On
Option Infer Off
Option Explicit On


    Public Class SimpleCalculatorForm

    #Region "FormLoad"

    Private Sub SimpleCalculatorForm_Load(ByVal sender As System.Object, ByVal e As EventArgs) Handles MyBase.Load
        Dim decimalSeperator As Char = Convert.ToChar(Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator)
        DecimalSeperatorButton.Text = decimalSeperator

        ResultTextbox.Text = "0"
    End Sub
#End Region

#Region "Methods"


    Private Sub RemoveMinusBeforeValue()
        For Each letter As String In ResultTextbox.Text
            Dim pos As Integer = pos + 1
            If letter = "-" Then
                ResultTextbox.Text = ResultTextbox.Text.Substring(pos, ResultTextbox.Text.Length - pos)
                Exit For
            End If
        Next
    End Sub

    Public Function ThereIsAnValue() As Boolean
        Dim x As Boolean
        For Each number As String In ResultTextbox.Text
            If number <> "0" Then
                x = True
                Exit For
            Else : x = False
            End If
        Next
        Return x
    End Function
    Public Function TextboxContainsDecimalSeparator() As Boolean
        Dim x As Boolean
        For Each letter As String In ResultTextbox.Text
            If letter = "," Then
                x = True
                Exit For
            Else : x = False
            End If
        Next
        Return x
    End Function
    Public Function TheValueIsPositive() As Boolean
        Dim x As Boolean
        For Each letter As String In ResultTextbox.Text
            If letter = "-" Then
                x = False
                Exit For
            Else : x = True
            End If
        Next

        Return x
    End Function

    Public Sub ContainsZero(number As String)
        If ResultTextbox.Text = "0" OrElse ResultTextbox.Text = "-0" Then
            ResultTextbox.Text = number
        ElseIf ResultTextbox.Text = "0.0" AndAlso number = "0" Then
            ResultTextbox.Text = number

        Else : ResultTextbox.Text &= number
        End If
    End Sub

#End Region


#Region "NumericButtons"

    Private Sub Numeric_Buttons_Click(sender As Object, e As EventArgs) Handles ZeroButton.Click, OneButton.Click, TwoButton.Click, ThreeButton.Click, _
                                                                            FourButton.Click, FiveButton.Click, SixButton.Click, SevenButton.Click, _
                                                                                EightButton.Click, NineButton.Click

        Dim x As Button = CType(sender, Button)
        Dim button As String = x.Text
        ContainsZero(button)

        If _Calculatevalue1 = Nothing Then
            _Calculatevalue1 &= button
        Else
            _Calculatevalue2 &= button
        End If


    End Sub



    Private Sub DecimalSeperatorButton_Click(sender As Object, e As EventArgs) Handles DecimalSeperatorButton.Click
        Dim x As Button = CType(sender, Button)
        Dim button As String = x.Text

        If TextboxContainsDecimalSeparator() = True Then
            MessageBox.Show("You cannot enter 2 times the ',' sign")
        Else : ResultTextbox.Text &= button
        End If


    End Sub

#End Region


#Region "OperatorButtons"


    Private Sub ClearButton_Click(sender As Object, e As EventArgs) Handles ClearButton.Click

        If ResultTextbox.Text = "0" Then
            MessageBox.Show("The field is already empty")
        ElseIf ResultTextbox.Text <> "0" Then
            ResultTextbox.Text = "0"
            _Calculatevalue1 = Nothing
            _Calculatevalue2 = Nothing
            _Calculatevalue3 = Nothing



        End If


    End Sub

    Private Sub NegationButton_Click(sender As Object, e As EventArgs) Handles NegationButton.Click

        If TheValueIsPositive() Then
            ResultTextbox.Text = "-" & ResultTextbox.Text
            _Calculatevalue3 = ResultTextbox.Text
        Else : RemoveMinusBeforeValue()
            _Calculatevalue3 = ResultTextbox.Text

        End If
    End Sub

    Private _Calculatevalue1 As String
    Private _Calculatevalue2 As String
    Private _TheFinalResult As Decimal
    Private _CurrentOperator As String
    Private _Calculatevalue3 As String


    Private Sub Operators_Buttons_Click(sender As Object, e As EventArgs) Handles AdditionButton.Click, SubtractionButton.Click, _
                                                                                MultiplicationButton.Click, DivisionButton.Click
        Dim x As Button = CType(sender, Button)
        Dim button As String = x.Text

        _CurrentOperator = button



        If _Calculatevalue1 = Nothing AndAlso ThereIsAnValue() = False Then
            MessageBox.Show("Give in a value before u use an operator")


            ResultTextbox.Text = "0"

        Else
            If ThereIsAnValue() Then

                If _Calculatevalue3 = Nothing Then
                    Select Case button

                        Case "+"
                            _Calculatevalue3 = Convert.ToString(Convert.ToDecimal(_Calculatevalue1) + Convert.ToDecimal(_Calculatevalue2))
                            ResultTextbox.Text = "0"


                    End Select

                Else
                    Select Case button

                        Case "+"
                            _Calculatevalue3 = Convert.ToString(Convert.ToDecimal(_Calculatevalue3) + Convert.ToDecimal(_TheFinalResult))
                            ResultTextbox.Text = "0"

                    End Select
                End If
            End If
        End If
    End Sub

    Private Sub EqualsButton_Click(sender As Object, e As EventArgs) Handles EqualsButton.Click
        Select Case _CurrentOperator

            Case "+"
                _TheFinalResult = Convert.ToDecimal(_Calculatevalue1) + Convert.ToDecimal(_Calculatevalue2)
                ResultTextbox.Text = _TheFinalResult.ToString
        End Select
        _Calculatevalue1 = Nothing

    End Sub
#End Region
End Class

毫不犹豫地删除部分代码或更改内容。我可以说我写了很多。

【问题讨论】:

  • 到底是什么问题?什么不工作?您想要完成的两件事的解决方案是相同的......而且非常明显(您暗示自己:previousresult)。
  • 嗨问题是我没有看到有关如何在未按下等号并且值继续输入时保持计算器计算的线索,或者在等号之后保持计算器计算的线索更多的价值正在到来......
  • 保存previousResult?

标签: .net vb.net calculator


【解决方案1】:

如果您不关心运算符的优先级,那么“=”按钮除了显示最终结果外应该没什么用。计算每个算子的最终结果。

最终结果 = 0

如果按“+”,则将下一个数字添加到最终结果
如果按“-”,则将下一个数字减去最终结果
如果按“/”,则将下一个数字除以最终结果
如果按“*”,则将下一个数字乘以最终结果
如果按“=”则显示最终结果


最终结果 = 0
输入(8)
最终结果加 8
输入(+) 输入(2)
将 2 添加到最终结果
输入(=)
显示最终结果

输入(/)输入(5)
除以 5 到最终结果
输入(=)
显示最终结果

【讨论】:

    【解决方案2】:

    我会保留一个运行总计。如果下一个输入是数学运算(例如,+、/、*、-),则使用运行总计作为第一个操作数。但是,如果是数字,则清除运行总计并开始新的计算。

    【讨论】:

      【解决方案3】:

      需要处理大量代码,但您可能需要一个模块/表单/类级别的变量,该变量在各种过程之外持续存在:

      Public Class SimpleCalculatorForm
      
       Friend CurrentResult As Integer        ' ??? doesnt look like you care
                                              ' much about datatpes
      #Region "FormLoad"
      

      使用currentresult 来存储...嗯,当前结果,只有当用户按“C”或等号两次或类似的东西时才会清除。这样,当前结果将在计算过程之外持续存在(即有一个scope)。

      【讨论】:

        猜你喜欢
        • 2021-05-15
        • 1970-01-01
        • 2016-04-16
        • 2019-01-05
        • 2012-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多