C# Calculateur De Classe

On m'a donné ce devoir à la maison, que j'ai été un moment difficile avec. Le formulaire a été écrit et nous avons eu à écrire la classe. Actuellement, lorsque je lance le programme est égal à mon bouton ne semble pas fonctionner. Je ne suis pas sûr pourquoi, et je me demandais si quelqu'un pouvait m'aider à comprendre ce que je suis absent. Je crois que j'ai écrite de ma classe correctement. Dans ma tête ce qui se passe est le calculateur est l'appel de la "currentValue" donc je suis constamment mise à jour avec la méthode que j'utilise dans ma opérateurs.

Suis-je dans la bonne direction?

Et pourquoi ce n'est pas mon égal bouton d'appel de la valeur actuelle. La dernière fois que j'ai couru ce, si j'ai tapé 9 + 3 + puis mon écran permettraient d'alimenter avec 12 et de m'attendre pour entrer dans le prochain numéro. Donc, en théorie, pourquoi ne pas mon égal bouton charger la réponse? Je crois que je vais appeler l'élément correct pourtant, je continue de faire mon inscription initiale. Par exemple, si j'ai tapé 9 + 9 et hit = je reçois 9.

Ici, c'est le calculateur de code (la partie fournis):

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

}

Voici ma classe (La partie que j'ai écrit):

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

}

  • L'utilisation de l'ol' débogueur pour cela.
  • 'calc.Equals(displayValue); " je ne vois pas Equal() méthode dans votre classe contiennent cette. Êtes-vous réussi à le compiler?
  • Dites-vous une autre méthode equals? un retour de la currentValue et un retour displayValue?
  • dans votre code de classe, vous n'avez qu'une Égalité de méthode. Mais dans votre code, vous aide 'calc.Equals(displayValue)'. Donc, je suppose que vous avez besoin d'un autre l'Égalité de méthode pour prendre en 'displayValue paramètre.
  • jhyap - quand j'ai essayé le code que j'obtiens un message d'erreur qui dit que le type ou l'espace de noms n'a pas pu être trouvé. est-ce parce que j'ai enlevé la déclaration du haut de ma page? (par l'utilisateur ci-dessous?)
  • Dans le code Principal en haut de liste mettre ceci: à l'aide de la Calculatrice.Calculatrice
  • à l'aide de la Calculatrice.Calculatrice m'a donné une erreur. il me dit calculatrice.la calculatrice est un type pas un espace de noms.
  • quand je F11 à travers, je me retrouve bloqué lorsque le calculateur de charges, alors je peux entrer un numéro de l'échantillon et de se coincer à nouveau pouvez pas F11 par... des suggestions? Je sais que c'est une question stupide, mais je suis un novice dans ce domaine.
  • laissez-nous continuer cette discussion dans le chat
  • "Dans ma tête ce qui se passe est le calculateur est l'appel de la "currentValue""... Si vous êtes au point des événements dans votre cours, vous pouvez utiliser INotifyPropertyChanged de mettre à jour l'affichage du Formulaire msdn.microsoft.com/en-us/library/...
  • Vous avez posté entièrement trop de code ici, et votre question est vague. Une phrase qui parle des problèmes avec la division, et les prochaines discussions sur les problèmes liés à la multiplication. Veuillez modifier votre question à inclure uniquement le code et de le rendre plus clair ce que vous nous demandez de vous aider, afin que nous puissions essayer de le faire. Ce qui nous attend à parcourir des centaines de lignes de code pour comprendre ce que vous me demandez, c'est un peu déraisonnable. Voir SSCCE pour plus d'informations sur la façon de le faire. Merci.
  • Je m'en excuse. J'ai raccourci mon code, j'espère seulement y compris les renseignements pertinents. Je ne voulais pas accidentellement laisser quoi que ce soit.
  • Oui, en effet, il ne.
  • Puis-je supprimer la question? Réaliser le code est le même, la question est différente. Je vois comment c'est la même chose dans le sens que c'est le même code. Ma question, j'ai demandé l'autre jour, a propos de ma classe, pas le code. La raison pour laquelle le code du formulaire a été posté est parce que j'ai demandé.
  • Pas maintenant, parce que vous avez reçu de réponses. Si le problème est en effet différent, vous devez le lien de cette autre question et expliquer que vous êtes à poster une autre question concernant le code, et dans les deux cas seulement après la partie pertinente du code. Si les questions sont différentes, la partie pertinente du code, il faut être différente. (Vous pouvez toujours le faire, de sorte que les modérateurs peuvent disposer de cette information lors de l'examen.)

InformationsquelleAutor Jeremy B | 2013-11-14