2017-03-14 23 views
0

私は単純な電卓プログラムで作業しています。私は何かが欠けていることを知っています。私は提供された手順を踏んだが、すでにいくつかの矛盾があったことをすでに指摘しているので、これが再び当てはまるか、情報が単に「欠落している」と確信している。私には2つの問題があります。 1つは、オペレータボタンを押す前に2番目の番号を押すと、2番目の(およびすべての連続した番号ボタンが押された)2番目の番号が連結されます。意味は、「1」→「2」を押すと「122」になります。 「3」を押すと「12233」と表示されます。私が持っている2番目の問題は、等価ボタンをコーディングする方法を理解できないことです。私はdblCurrentNumber.ToString()という変数がEquals_clickに割り当てられると考えていました。しかし、それは動作しません。私は答えを教えたり、私のために私の任務を完了させる人を探しているわけではありません。それは学習の目的を破るでしょう。私は、私が逃しているものについて手がかりを探しているだけです。Visual Basic Calculatorを使用したロジック

Option Explicit On 
Option Strict On 
Imports System.Math 

Public Class Calculator 
    'declare the global variables here 
    Dim dblResult As Double 'Stores the result of an operation 
    Dim dblCurrentNumber As Double 'Stores the current number in the display 
    Dim dblMemory As Double 'Stores a value placed in memory by the user 
    Dim blnStartNewNumber As Boolean 'Determines whether a new number should be started in the display 
    Dim strLastMathOperator As String 'Stores the operation selected by the user; possible values include Clear, Add, Subtract, Multiply, Divide or Equals 


'''<summary> 
'''clears the values of all variables 
'''required to reset the calculator 
'''</summary> 
'''<remarks>none</remarks> 
Private Sub resetCalculator() 
    Me.lblResult.Text = "0" 
    dblResult = 0 
    strLastMathOperator = "Clear" 
    blnStartNewNumber = True 
    dblCurrentNumber = 0 
End Sub 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    resetCalculator() 
End Sub 
Private Sub btnPower_Click(sender As Object, e As EventArgs) Handles btnPower.Click 
    'Clears the values of all variables 
    resetCalculator() 
End Sub 

Private Sub buildNumber(ByVal strNumber As String) 
    lblResult.Text = lblResult.Text & strNumber 
    dblCurrentNumber = Convert.ToDouble(lblResult.Text) 
    'Should we start a new number or add to an existing number? 
    If blnStartNewNumber Then 
     'start a new number 
     lblResult.Text = strNumber 
    Else 
     'append to the current number 
     lblResult.Text = lblResult.Text & strNumber 
    End If 
    blnStartNewNumber = False 
End Sub 

''' <summary> 
''' Applies the last operator to result using current number 
''' </summary> 
''' <param name="strOperation">the math operation to 
'''  perform +, -, *,/or clear 
'''</param> 

Private Sub handleOperator(ByVal strOperation As String) 
    strLastMathOperator = strOperation 
    Select Case strLastMathOperator.ToUpper 
     Case "ADD" 
      dblResult = dblResult + dblCurrentNumber 
     Case "SUBTRACT" 
      dblResult = dblResult - dblCurrentNumber 
     Case "MULTIPLY" 
      dblResult = dblResult * dblCurrentNumber 
     Case "DIVIDE" 
      dblResult = dblResult/dblCurrentNumber 
     Case Else 
      dblResult = dblCurrentNumber 
    End Select 
    'dblCurrentNumber = dblResult 
    Me.lblResult.Text = dblCurrentNumber.ToString 
    Me.blnStartNewNumber = True 
    btnDecimal.Enabled = True 

End Sub 

Private Sub btn0_Click(sender As Object, e As EventArgs) Handles btn0.Click 
    buildNumber("0") 
End Sub 

Private Sub btn1_Click(sender As Object, e As EventArgs) Handles btn1.Click 
    buildNumber("1") 
End Sub 

Private Sub btn2_Click(sender As Object, e As EventArgs) Handles btn2.Click 
    buildNumber("2") 
End Sub 

Private Sub btn3_Click(sender As Object, e As EventArgs) Handles btn3.Click 
    buildNumber("3") 
End Sub 

Private Sub btn4_Click(sender As Object, e As EventArgs) Handles btn4.Click 
    buildNumber("4") 
End Sub 

Private Sub btn5_Click(sender As Object, e As EventArgs) Handles btn5.Click 
    buildNumber("5") 
End Sub 

Private Sub btn6_Click(sender As Object, e As EventArgs) Handles btn6.Click 
    buildNumber("6") 
End Sub 

Private Sub btn7_Click(sender As Object, e As EventArgs) Handles btn7.Click 
    buildNumber("7") 
End Sub 

Private Sub btn8_Click(sender As Object, e As EventArgs) Handles btn8.Click 
    buildNumber("8") 
End Sub 

Private Sub btn9_Click(sender As Object, e As EventArgs) Handles btn9.Click 
    buildNumber("9") 
End Sub 

Private Sub btnSquareRoot_Click(sender As Object, e As EventArgs) Handles btnSquareRoot.Click 
    dblCurrentNumber = Sqrt(dblCurrentNumber) 
    Me.lblResult.Text = Str(dblCurrentNumber) 
End Sub 

Private Sub btnPercent_Click(sender As Object, e As EventArgs) Handles btnPercent.Click 
    Me.lblResult.Text = Str(dblCurrentNumber/100) 
    dblCurrentNumber = dblCurrentNumber/100 
    blnStartNewNumber = True 
End Sub 

Private Sub btnPlusOrMinus_Click(sender As Object, e As EventArgs) Handles btnPlusOrMinus.Click 
    dblCurrentNumber = (dblCurrentNumber * (-1)) 
    Me.lblResult.Text = dblCurrentNumber.ToString() 
End Sub 

Private Sub btnDivide_Click(sender As Object, e As EventArgs) Handles btnDivide.Click 
    handleOperator("DIVIDE") 
End Sub 

Private Sub btnMultiply_Click(sender As Object, e As EventArgs) Handles btnMultiply.Click 
    handleOperator("MULTIPLY") 
End Sub 

Private Sub btnSubtract_Click(sender As Object, e As EventArgs) Handles btnSubtract.Click 
    handleOperator("SUBTRACT") 
End Sub 

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click 
    handleOperator("ADD") 
End Sub 

Private Sub btnEquals_Click(sender As Object, e As EventArgs) Handles btnEquals.Click 
    dblCurrentNumber.ToString() 
End Sub 
End Class 
+0

デバッガでコードをステップ実行すると何が表示されますか? –

+1

タグを[vba]ではなく[vb.net]に編集しました。 (私はVBAでは 'Imports'文も、' .ToString'メソッドも '.Net'でしか見られませんでした。)私が間違っていたら、変更をロールバックしてください。 – YowE3K

+0

@ YowE3Kまたは 'Handles object.Event'どちらか;-) –

答えて

1

最初の問題は簡単なものです:

1 Private Sub buildNumber(ByVal strNumber As String) 
2  lblResult.Text = lblResult.Text & strNumber 
3  dblCurrentNumber = Convert.ToDouble(lblResult.Text) 
4  'Should we start a new number or add to an existing number? 
5  If blnStartNewNumber Then 
6   'start a new number 
7   lblResult.Text = strNumber 
8  Else 
9   'append to the current number 
10   lblResult.Text = lblResult.Text & strNumber 
11  End If 
12  blnStartNewNumber = False 
13 End Sub 

、あなたは数字を追加している場合はライン2をライン2、7を見てください、そして10

状態(最初または後の数字)に関係なく追加します。その後、10行目に再びが追加されます。

最初の数字のためには効果がありません

ライン2桁を追加しながら、あなたはおそらく自分自身についてを尋ねるべきである7

行に値を設定するとき、それは捨てています、ので(blnStartNewNumberがtrueの場合)そのコードの2行目のユーティリティ(nudge、nudge、wink、wink)。 equalsサブルーチンに何をすべきかという点で


、(例えば)それとの違いを見ている平方根ハンドラ。後者は実際にはになります。結果を計算するだけではなく(その結果を離していると思われます)。

+0

ありがとう!連結問題を修正しました。私はEQUALSボタンをどう扱うかについてまだ迷っています。 handleOperatorサブルーチンのロジックが間違っているような気がします。ここで起こっていることは、「4」と「5」のような2つのボタンを押して「45」を表し、次に「*」ボタンを押して「5」を消して「4」を表示することです。そして、「*」をもう一度押すと、4倍して「16」と表示されます。 – T4RH33L