C# Taschenrechner Klasse

Erhielt ich diese Hausaufgabe, die ich habe eine harte Zeit mit. Die form wurde geschrieben und wir hatten die zum schreiben der Klasse. Derzeit, wenn ich das Programm starte meine equals-Taste scheint nicht zu funktionieren. Ich bin mir nicht sicher warum, und ich Frage mich, wenn mir jemand helfen könnte zu verstehen, was ich bin fehlt. Ich glaube, dass ich geschrieben habe, meiner Klasse richtig. In meinem Kopf, was passiert ist, ist der Rechner Aufruf des "currentValue" ich bin also ständig zu aktualisieren mit der Methode, die ich benutze in meinem Betreiber.

Bin ich in die richtige Richtung?

... Und warum nicht meine ist-gleich-Taste ruft den aktuellen Wert. Das Letzte mal lief ich das, wenn ich getippt, 9 + 3 + dann mein display bevölkern mit 12, und warten Sie für mich, um in der nächsten Nummer. So in der Theorie, warum würde nicht meine ist-gleich-Taste laden Sie die Antwort? Ich glaube, ich rufe das richtige Element, das ich noch immer meinen ersten Eintrag. Zum Beispiel, wenn ich getippt, 9 + 9 und hit = ich erhalte 9.

Hier ist der Rechner code (der Teil zur Verfügung gestellt):

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 > 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;
        }
    }

}

}

Hier ist meine Klasse (Der Teil, den ich schrieb):

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;
          }

     }
}

}

  • Verwenden Sie die ol' debugger für diese.
  • 'calc.Equals(displayValue); " ich sehe keine Equal() Methode in der Klasse enthalten ist. Sind Sie auf verwalten, um es zu kompilieren?
  • Sagen Sie, weitere equals-Methode? eine Rücksendung der currentValue und eine Rückkehr displayValue?
  • in Ihrer Klasse code, Sie müssen nur eine Gleiche Methode. Aber in Ihrem Haupt-code, den Sie mit 'calc.Equals(displayValue)'. Von daher würde ich denke, Sie müssen eine andere Gleichwertige Methode zu nehmen, 'displayValue' parameter.
  • jhyap - als ich versuchte, die code bekomme ich eine Fehlermeldung die besagt, dass der Typ oder namespace " konnte nicht gefunden werden. ist diese entfernt, weil ich die Erklärung von oben auf meine Seite? (pro dem Benutzer unter?)
  • An der Haupt-code-top gibt es setzen diese: mit Taschenrechner.Taschenrechner
  • mit Taschenrechner.Taschenrechner gab mir eine Fehlermeldung. es sagt mir, Taschenrechner.Rechner ist ein Typ, nicht auf einen namespace.
  • wenn ich F11 durch stecken ich, wenn der Rechner lädt, dann kann ich geben Sie eine sample-Nummer und stecken wieder nicht F11 durch... irgendwelche Vorschläge? Ich weiß es ist eine blöde Frage, aber ich bin ein Anfänger in diesem.
  • lassen Sie uns weiter, diese Diskussion im chat
  • "In meinem Kopf, was passiert ist, ist der Rechner Aufruf des "currentValue""... Wenn Sie an der Stelle der Ereignisse in Ihrem Kurs, die Sie nutzen könnten INotifyPropertyChanged zur Aktualisierung der Form-display msdn.microsoft.com/en-us/library/...
  • Du hast geschrieben ganz zu viel code hier, und deine Frage ist ungenau. Ein Satz spricht über Probleme mit der division, und die nächsten Gespräche über die Probleme mit der Multiplikation. Bitte Bearbeiten Ihre Frage zu include nur der entsprechende code und machen es klarer, was du fragst uns, helfen Sie mit, damit wir versuchen können und tun. Erwartet, dass wir waten durch Hunderte von Zeilen code, um herauszufinden, was Sie Fragen, ist ein wenig unvernünftig. Siehe SSCCE für Informationen über wie Sie dies tun. Danke.
  • Ich entschuldige mich. Ich verkürzt mein code, hoffentlich nur mit relevanten Informationen. Ich wollte nicht versehentlich verlassen etwas aus.
  • Ja, ja er Tat.
  • Kann ich den löschen der Frage? Die Realisierung der code ist der gleiche, die Frage ist anders. Ich sehe, wie er das gleiche in dem Sinne, es ist der gleiche code. Meine Frage, die ich den anderen Tag war über meine Klasse, nicht der code. Der Grund ist der form-code gepostet wurde, war, weil ich danach gefragt.
  • Nicht jetzt, weil Sie erhalten haben, Antworten auf Sie. Wenn das problem ist in der Tat anders, sollten Sie eine andere Frage und erklären, dass Sie die Buchung eine andere Frage in Bezug auf den code, und in beiden Fällen nur nach den relevanten Teil des Codes. Wenn die Fragen unterschiedlich sind, wird der relevante Teil des Codes sollte auch anders sein. (Sie können dies immer noch tun, so können die Moderatoren haben, dass Informationen, wenn Sie zu überprüfen.)

InformationsquelleAutor Jeremy B | 2013-11-14
Schreibe einen Kommentar