Ma Calculatrice ne fonctionne pas correctement

Fermé
davycdz - 19 mai 2014 à 16:02
 davycdz - 19 mai 2014 à 23:20
Bonjour,

Ma calculatrice que j'essaie de faire en java ne fonctionne pas bien.

Si je fais 5-5, ça me répond -10
aussi, si je cliques d'abord sur le signe + ou moins, ça plante.

Est-ce qui quelqu'un pourrait m'aider svp ?

Ca se présente en deux classes. La classe calculatrice, et la classe calculatriceSwing.


public class CalculatriceSwing extends javax.swing.JFrame {
private static Calculatrice calc = new Calculatrice();
private String str="";
private String operateur;
/**
* Creates new form CalculatriceSwing
*/
public CalculatriceSwing() {
initComponents();
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

resultatLabel = new javax.swing.JLabel();
Btn7 = new javax.swing.JButton();
Btn8 = new javax.swing.JButton();
Btn9 = new javax.swing.JButton();
Btn4 = new javax.swing.JButton();
Btn5 = new javax.swing.JButton();
Btn6 = new javax.swing.JButton();
Btn1 = new javax.swing.JButton();
Btn2 = new javax.swing.JButton();
Btn3 = new javax.swing.JButton();
BtnPlus = new javax.swing.JButton();
Btn0 = new javax.swing.JButton();
BtnDiv = new javax.swing.JButton();
BtnMoins = new javax.swing.JButton();
BtnFois = new javax.swing.JButton();
BtnEgal = new javax.swing.JButton();
BtnC = new javax.swing.JButton();
BtnPoint = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Calculatrice");

resultatLabel.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
resultatLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
resultatLabel.setText("0");

Btn7.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
Btn7.setText("7");
Btn7.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn7ActionPerformed(evt);
}
});

Btn8.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
Btn8.setText("8");
Btn8.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn8ActionPerformed(evt);
}
});

Btn9.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
Btn9.setText("9");
Btn9.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn9ActionPerformed(evt);
}
});

Btn4.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
Btn4.setText("4");
Btn4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn4ActionPerformed(evt);
}
});

Btn5.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
Btn5.setText("5");
Btn5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn5ActionPerformed(evt);
}
});

Btn6.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
Btn6.setText("6");
Btn6.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn6ActionPerformed(evt);
}
});

Btn1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
Btn1.setText("1");
Btn1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn1ActionPerformed(evt);
}
});

Btn2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
Btn2.setText("2");
Btn2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn2ActionPerformed(evt);
}
});

Btn3.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
Btn3.setText("3");
Btn3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn3ActionPerformed(evt);
}
});

BtnPlus.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
BtnPlus.setText("+");
BtnPlus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnPlusActionPerformed(evt);
}
});

Btn0.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
Btn0.setText("0");
Btn0.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Btn0ActionPerformed(evt);
}
});

BtnDiv.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
BtnDiv.setText("/");
BtnDiv.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnDivActionPerformed(evt);
}
});

BtnMoins.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
BtnMoins.setText("-");
BtnMoins.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnMoinsActionPerformed(evt);
}
});

BtnFois.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
BtnFois.setText("*");
BtnFois.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnFoisActionPerformed(evt);
}
});

BtnEgal.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
BtnEgal.setText("=");
BtnEgal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnEgalActionPerformed(evt);
}
});

BtnC.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
BtnC.setText("C");
BtnC.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnCActionPerformed(evt);
}
});

BtnPoint.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
BtnPoint.setText(".");
BtnPoint.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnPointActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(Btn4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Btn5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Btn6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(BtnMoins))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addComponent(Btn1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Btn2))
.addComponent(Btn0, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addComponent(Btn3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(BtnFois))
.addGroup(layout.createSequentialGroup()
.addComponent(BtnPoint)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(BtnDiv, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(BtnEgal))
.addComponent(resultatLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 223, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(Btn7)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Btn8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Btn9)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(BtnPlus)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(BtnC)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {Btn1, Btn2, Btn3, Btn4, Btn5, Btn6, Btn7, Btn8, Btn9, BtnC, BtnDiv, BtnEgal, BtnFois, BtnMoins, BtnPlus, BtnPoint});

layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(resultatLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Btn7)
.addComponent(Btn8)
.addComponent(Btn9)
.addComponent(BtnPlus, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(BtnC))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Btn4)
.addComponent(Btn5)
.addComponent(Btn6)
.addComponent(BtnMoins))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Btn1)
.addComponent(Btn2)
.addComponent(Btn3)
.addComponent(BtnFois))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Btn0)
.addComponent(BtnDiv)
.addComponent(BtnPoint))
.addGap(0, 0, Short.MAX_VALUE))
.addComponent(BtnEgal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);

layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {Btn0, Btn1, Btn2, Btn3, Btn4, Btn5, Btn6, Btn7, Btn8, Btn9, BtnC, BtnDiv, BtnFois, BtnMoins, BtnPlus, BtnPoint});

pack();
}// </editor-fold>

private void Btn7ActionPerformed(java.awt.event.ActionEvent evt) {
String car = "7";
str += car;
resultatLabel.setText(str);
}

private void Btn8ActionPerformed(java.awt.event.ActionEvent evt) {
String car ="8";
str += car;
resultatLabel.setText(str);
}

private void Btn9ActionPerformed(java.awt.event.ActionEvent evt) {
String car="9";
str += car;
resultatLabel.setText(str);
}

private void Btn4ActionPerformed(java.awt.event.ActionEvent evt) {
String car="4";
str += car;
resultatLabel.setText(str);
}

private void Btn5ActionPerformed(java.awt.event.ActionEvent evt) {
String car="5";
str += car;
resultatLabel.setText(str);
}

private void Btn6ActionPerformed(java.awt.event.ActionEvent evt) {
String car="6";
str += car;
resultatLabel.setText(str);
}

private void Btn1ActionPerformed(java.awt.event.ActionEvent evt) {
String car="1";
str += car;
resultatLabel.setText(str);
}

private void Btn2ActionPerformed(java.awt.event.ActionEvent evt) {
String car="2";
str += car;
resultatLabel.setText(str);
}

private void Btn3ActionPerformed(java.awt.event.ActionEvent evt) {
String car="3";
str += car;
resultatLabel.setText(str);
}

private void BtnPointActionPerformed(java.awt.event.ActionEvent evt) {
String car=".";
if(str.indexOf(".")==-1) str+=car;
resultatLabel.setText(str);
}

private void Btn0ActionPerformed(java.awt.event.ActionEvent evt) {
String car="0";
str += car;
resultatLabel.setText(str);
}

private void BtnPlusActionPerformed(java.awt.event.ActionEvent evt) {
operateur="+";
calc.ajoute(Double.parseDouble(str));
str="";
// resultatLabel.setText(Double.toString(calc.getResultat()));
}

private void BtnMoinsActionPerformed(java.awt.event.ActionEvent evt) {
operateur="-";
calc.soustrait(Double.parseDouble(str));
str="";
// resultatLabel.setText(Double.toString(calc.getResultat()));
}

private void BtnEgalActionPerformed(java.awt.event.ActionEvent evt) {
switch(operateur){
case "+" : calc.ajoute(Double.parseDouble(str)); break;
case "-" : calc.soustrait(Double.parseDouble(str)); break;

}
// if(operateur=="+") calc.ajoute(Double.parseDouble(str));
calc.getResultat();
str="";
resultatLabel.setText(Double.toString(calc.getResultat()));
}

private void BtnCActionPerformed(java.awt.event.ActionEvent evt) {
calc.setResultat(0);
str="";
resultatLabel.setText("0");
}

private void BtnFoisActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void BtnDivActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}




/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(CalculatriceSwing.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(CalculatriceSwing.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(CalculatriceSwing.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(CalculatriceSwing.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new CalculatriceSwing().setVisible(true);
}
});


}

// Variables declaration - do not modify
private javax.swing.JButton Btn0;
private javax.swing.JButton Btn1;
private javax.swing.JButton Btn2;
private javax.swing.JButton Btn3;
private javax.swing.JButton Btn4;
private javax.swing.JButton Btn5;
private javax.swing.JButton Btn6;
private javax.swing.JButton Btn7;
private javax.swing.JButton Btn8;
private javax.swing.JButton Btn9;
private javax.swing.JButton BtnC;
private javax.swing.JButton BtnDiv;
private javax.swing.JButton BtnEgal;
private javax.swing.JButton BtnFois;
private javax.swing.JButton BtnMoins;
private javax.swing.JButton BtnPlus;
private javax.swing.JButton BtnPoint;
private javax.swing.JLabel resultatLabel;
// End of variables declaration
}


Et voici la classe calculatrice


public class Calculatrice {

private double resultat;

public Calculatrice(){
resultat=0;
}

public double getResultat(){
return resultat;
}

public void setResultat(double val){
resultat = val;
}

public double ajoute(double val){
return resultat += val;
}

public double multiplie(double val){
return resultat *= val;
}

public double divise(double val){
return resultat /= val;
}

public double soustrait(double val){
return resultat -= val;
}
}
A voir également:

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
19 mai 2014 à 19:54
Bonsoir,

Puisque tu utilises NetBeans (ça se voit à 3 kilomètres), tu devrais mettre des points d'arrêts et faire du pas à pas dans ton code pour comprendre ce qui se passe.

Voir : Débogage de Programmes Java

En gros, tu fais :

CalculatriceSwing()
str = ""
calc.resultat = 0

Btn5ActionPerformed
str = "5"
calc.resultat = 0

BtnMoinsActionPerformed
str = ""
calc.resultat = -5

Btn5ActionPerformed
str = "5"
calc.resultat = -5

BtnEgalActionPerformed
str = ""
calc.resultat = -10
0
Merci d'avoir répondu, j'essaie mais je n'y arrive toujours pas,

voici ce que j'ai fait pour mes codes +,-,C et =


private void BtnPlusActionPerformed(java.awt.event.ActionEvent evt) {


operateur="+";
calc.ajoute(Double.parseDouble(str));
str="";

}

private void BtnMoinsActionPerformed(java.awt.event.ActionEvent evt) {
if(str=="") str="-"+str;
else{
operateur="-";
calc.soustrait(Double.parseDouble(str));
str="";
}


}

private void BtnEgalActionPerformed(java.awt.event.ActionEvent evt) {
switch(operateur){
case "+" : calc.ajoute(Double.parseDouble(str)); break;
case "-" : calc.soustrait(Double.parseDouble(str)); break;

}

calc.getResultat();
str="";
resultatLabel.setText(Double.toString(calc.getResultat()));
}

private void BtnCActionPerformed(java.awt.event.ActionEvent evt) {
calc.setResultat(0);
str="";
operateur="";
resultatLabel.setText("0");

}




les + et * fonctionnent sauf que pour le - si je fais 4-4, j'obtiens -8
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 19/05/2014 à 22:59
if(str=="")
est faux, il ne faut jamais comparer deux objets avec
==
ça ne fera pas ce que tu veux. Utilises la méthode
equals
à la place, ou dans ton cas précis, la méthode
isEmpty
.
0
j'ai déjà essayé les deux, ça ne fonctionne pas
0

private void BtnMoinsActionPerformed(java.awt.event.ActionEvent evt) {
if(str.isEmpty()) str="-"+str;
else{
str="-"+str;
operateur="-";
calc.soustrait(Double.parseDouble(str));
str="";
}
}

merci de m'aider.

avec ce code, maintenant, je ne peux pas faire -6-4=
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
19 mai 2014 à 23:12
Le problème ici c'est que tu fais l'opération au moment où tu appuies sur l'opérateur, or il faut attendre de connaître la seconde opérande avant d'obtenir le résultat...

Tu connais les piles ?
http://fr.wikipedia.org/wiki/Pile_(informatique)

Ce qu'il te faut c'est empiler les opérandes et les opérateurs, dès que tu atteints la taille 3 (c'est à dire deux opérandes et un opérateur), tu dépiles pour faire ton calcul et tu rempiles le résultat.

C'est comme ça que fonctionne la mémoire d'une calculatrice.
0
non, vraiment désolé, je ne connais pas les piles.

ma prof m'a expliqué vite fait, elle a dit que j'étais capable de le faire avec tout ce que j'ai appris.
C'est une question d'exam, elle ne peut pas m'en dire plus. On doit être capable de le faire en "chipotant", (drôle de logique) et avec tout ce qu'on a vu, et les piles n'en font pas partie.

Je pense qu'elle a parlé d'un booléen, à savoir si c'était le premier ou je ne sais pas trop quoi. avec une variable "old operateur" ou un truc du genre, mais c'était vraiment à l'arrache

merci de m'aider
0