title: C# Calculator Class
body: <p>I was given this homework assignment, which I have been having a hard time with. The form was written and we had to write the class. Currently when I run the program my equals button does not appear to be working. I'm unsure why and I was wondering if someone could help me understand what I am missing. I believe I have written my class correctly. In my head what is going on is the calculator is calling the "currentValue" so I am constantly updating with the method I am using in my operators. </p>
  
  <p>Am I in the right direction?</p>
  
  <p>And why isn't my equals button calling the current value. The last time I ran this, if I typed 9 + 3 + then my display would populate with 12 and wait for me to enter the next number. So in theory why wouldn't my equals button load the answer? I believe I am calling the correct item yet I keep getting my initial entry. For instance if I typed 9 + 9 and hit = I keep getting 9. </p>
  
  <p>Here is the calculator code (the part provided):</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;
  
  namespace Calculator
  {
  public partial class frmCalculator : Form
  {
      public frmCalculator()
      {
          InitializeComponent();
      }
  
      // The following fields are used to store the value that's currently
      // displayed by the calculator. displayString is a string value that's
      // constructed as the user clicks numeric keys and the decimal and +/-
      // key. The Convert.ToDecimal method is then used to convert this to a decimal
      // field that's stored in displayValue.
      private string displayString;
      private decimal displayValue;
  
      // The following bool fields are used to control numeric entry.
      // newValue indicates whether the calculator is ready to receive a
      // new numeric value. Once the user clicks a digit button, newValue is
      // set to false. When the user clicks a button that "enters" the value, 
      // such as Add or Equals, newValue is set to true so the user can enter 
      // another value.
      // decimalEntered is used to restrict the entry to a single decimal point.
      // It is set to true whenever newValue is set to true, and it is set to 
      // false whenever the user clicks the decimal point button.
      private bool newValue;
      private bool decimalEntered;
  
      private Calculator calc = new Calculator();
  
      private void Form1_Load(object sender, System.EventArgs e)
      {
          displayValue = 0;
          displayString = displayValue.ToString();
          newValue = true;
          decimalEntered = false;
      }
  
      // This method handles the 0 through 9 keys, appending the digit clicked
      // to the displayString field. 
      private void btnNumber_Click(object sender, System.EventArgs e)
      {
          if (newValue)
          {
              displayString = "";
              newValue = false;
          }
          displayString += ((Button)sender).Tag.ToString();
          displayValue = Convert.ToDecimal(displayString);
          txtDisplay.Text = displayValue.ToString();
      }
  
      // This method removes the last character from the displayString field.
      private void btnBackSpace_Click(object sender, System.EventArgs e)
      {
          if (displayString.Length &gt; 1)
          {
              displayString = displayString.Substring(0, displayString.Length - 1);
              displayValue = Convert.ToDecimal(displayString);
              txtDisplay.Text = displayValue.ToString();
          }
          else
          {
              displayString = "";
              displayValue = 0;
              txtDisplay.Text = displayValue.ToString();
          }
  
      }
  
      private void btnClear_Click(object sender, System.EventArgs e)
      {
          calc.Clear();
          displayString = "";
          displayValue = 0;
          txtDisplay.Text = displayValue.ToString();
          newValue = true;
          decimalEntered = false;
      }
  
      // This method appends a decimal point to the displayString field if the
      // user has not already entered a decimal point.
      private void btnDecimal_Click(object sender, System.EventArgs e)
      {
          if (newValue)
          {
              displayString = "0";
              newValue = false;
          }
          if (!decimalEntered)
          {
              displayString += ".";
              displayValue = Convert.ToDecimal(displayString);
              txtDisplay.Text = displayValue.ToString();
              decimalEntered = true;
          }
      }
  
      private void btnSign_Click(object sender, System.EventArgs e)
      {
          displayValue = -displayValue;
          txtDisplay.Text = displayValue.ToString();
      }
  
      private void btnAdd_Click(object sender, System.EventArgs e)
      {
          calc.Add(displayValue);
          newValue = true;
          decimalEntered = false;
          displayValue = calc.CurrentValue;
          txtDisplay.Text = displayValue.ToString();
      }
  
      private void btnSubtract_Click(object sender, System.EventArgs e)
      {
          calc.Subtract(displayValue);
          newValue = true;
          decimalEntered = false;
          displayValue = calc.CurrentValue;
          txtDisplay.Text = displayValue.ToString();
      }
  
      private void btnMultiply_Click(object sender, System.EventArgs e)
      {
          calc.Multiply(displayValue);
          newValue = true;
          decimalEntered = false;
          displayValue = calc.CurrentValue;
          txtDisplay.Text = displayValue.ToString();
      }
  
      private void btnDivide_Click(object sender, System.EventArgs e)
      {
          calc.Divide(displayValue);
          newValue = true;
          decimalEntered = false;
          displayValue = calc.CurrentValue;
          txtDisplay.Text = displayValue.ToString();
      }
  
      private void btnSqrt_Click(object sender, System.EventArgs e)
      {
          calc.SquareRoot(displayValue);
          displayValue = calc.CurrentValue;
          txtDisplay.Text = displayValue.ToString();
      }
  
      private void btnReciprocal_Click(object sender, System.EventArgs e)
      {
          try
          {
              calc.Reciprocal(displayValue);
              displayValue = calc.CurrentValue;
              txtDisplay.Text = displayValue.ToString();
          }
          catch (DivideByZeroException)
          {
              displayValue = 0;
              txtDisplay.Text = "Cannot divide by zero.";
              newValue = true;
              decimalEntered = false;
          }
      }
  
      private void btnEquals_Click(object sender, System.EventArgs e)
      {
          try
          {
              if (newValue)
                  calc.Equals();
              else
                  calc.Equals(displayValue);
              displayValue = calc.CurrentValue;
              txtDisplay.Text = displayValue.ToString();
              newValue = true;
              decimalEntered = false;
          }
          catch (DivideByZeroException)
          {
              displayValue = 0;
              txtDisplay.Text = "Cannot divide by zero.";
              newValue = true;
              decimalEntered = false;
          }
      }
  
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Here is my class (The part I wrote):</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  
  namespace Calculator
  {
  public class Calculator
  {
  
      public Decimal displayValue;
      public Decimal currentValue;
  
       public void Add(Decimal displayValue)
      {
  
          currentValue += displayValue;
  
      }
  
       public void Subtract(Decimal displayValue)
       {
           currentValue -= displayValue;
       }
  
       public void Multiply(Decimal displayValue)
       {
           currentValue *= displayValue;
       }
  
  
       public void Divide(Decimal displayValue)
       {
           currentValue /= displayValue;
       }
  
       public void SquareRoot(Decimal displayValue)
       {
           currentValue = (decimal)Math.Sqrt(Convert.ToDouble(displayValue));
       }
  
       public void Reciprocal(Decimal displayValue)
       {
           currentValue = 1 / displayValue;
       }
  
       public decimal Equals()
       {
           return currentValue;
       }
  
  
       public void Clear()
       {
           currentValue = 0;
           displayValue = 0;
       }
  
       public decimal CurrentValue
       {
         get
            {
             return currentValue;
            }
  
       }
  }
  </code></pre>
  
  <p>}</p>