2010-11-28 9 views
1

Je construis une simple calculatrice Java GUI. J'ai un problème pour trouver un paquet ou trouver une méthode pour faire le calcul réel. Jusqu'ici j'ai pensé que quand je fais une opération de maths, le nombre dans la boîte de texte est sauvé dans un emplacement temporaire.Simple calculatrice Java GUI

Ensuite, quand je clique sur le bouton "=", il fera le calcul, mais je ne sais pas comment lui dire de prendre l'opération temporaire plus l'opération mathématique et le deuxième nombre et faire le calcul basé sur les mathématiques sélectionnées opération cliqué, +, -, *, /

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.util.*; 

public class JavaCalculator extends JFrame { 
    private JButton jbtNum1; 
     private JButton jbtNum2; 
     private JButton jbtNum3; 
     private JButton jbtNum4; 
     private JButton jbtNum5; 
     private JButton jbtNum6; 
     private JButton jbtNum7; 
     private JButton jbtNum8; 
     private JButton jbtNum9; 
     private JButton jbtNum0; 
    private JButton jbtEqual; 
     private JButton jbtAdd; 
     private JButton jbtSubtract; 
     private JButton jbtMultiply; 
     private JButton jbtDivide; 
     private JButton jbtSolve; 
     private JButton jbtClear; 
     private double TEMP; 
     private double SolveTEMP; 
    private JTextField jtfResult; 
    String display = ""; 

    public JavaCalculator() { 
     JPanel p1 = new JPanel(); 
     p1.setLayout(new GridLayout(4, 3)); 
     p1.add(jbtNum1 = new JButton("1")); 
     p1.add(jbtNum2 = new JButton("2")); 
     p1.add(jbtNum3 = new JButton("3")); 
     p1.add(jbtNum4 = new JButton("4")); 
     p1.add(jbtNum5 = new JButton("5")); 
     p1.add(jbtNum6 = new JButton("6")); 
     p1.add(jbtNum7 = new JButton("7")); 
     p1.add(jbtNum8 = new JButton("8")); 
     p1.add(jbtNum9 = new JButton("9")); 
     p1.add(jbtNum0 = new JButton("0")); 
     p1.add(jbtClear = new JButton("C")); 


     JPanel p2 = new JPanel(); 
     p2.setLayout(new FlowLayout()); 
     p2.add(jtfResult = new JTextField(20)); 
     jtfResult.setHorizontalAlignment(JTextField.RIGHT); 
     jtfResult.setEditable(false); 

       JPanel p3 = new JPanel(); 
       p3.setLayout(new GridLayout(5, 1)); 
       p3.add(jbtAdd = new JButton("+")); 
       p3.add(jbtSubtract = new JButton("-")); 
       p3.add(jbtMultiply = new JButton("*")); 
       p3.add(jbtDivide = new JButton("/")); 
       p3.add(jbtSolve = new JButton("=")); 

     JPanel p = new JPanel(); 
     p.setLayout(new GridLayout()); 
     p.add(p2, BorderLayout.NORTH); 
     p.add(p1, BorderLayout.SOUTH); 
     p.add(p3, BorderLayout.EAST); 


     add(p); 

     jbtNum1.addActionListener(new ListenToOne()); 
     jbtNum2.addActionListener(new ListenToTwo()); 
     jbtNum3.addActionListener(new ListenToThree()); 
       jbtNum4.addActionListener(new ListenToFour()); 
     jbtNum5.addActionListener(new ListenToFive()); 
     jbtNum6.addActionListener(new ListenToSix()); 
     jbtNum7.addActionListener(new ListenToSeven()); 
     jbtNum8.addActionListener(new ListenToEight()); 
     jbtNum9.addActionListener(new ListenToNine()); 
     jbtNum0.addActionListener(new ListenToZero()); 

     jbtAdd.addActionListener(new ListenToAdd()); 
     jbtSubtract.addActionListener(new ListenToSubtract()); 
     jbtMultiply.addActionListener(new ListenToMultiply()); 
     jbtDivide.addActionListener(new ListenToDivide()); 
     jbtSolve.addActionListener(new ListenToSolve()); 



    } //JavaCaluclator() 

    class ListenToOne implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "1"); 
     } 
    } 
    class ListenToTwo implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "2"); 
     } 
    } 
    class ListenToThree implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "3"); 
     } 
    } 
    class ListenToFour implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "4"); 
     } 
    } 
    class ListenToFive implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "5"); 
     } 
    } 
    class ListenToSix implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "6"); 
     } 
    } 
    class ListenToSeven implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "7"); 
     } 
    } 
    class ListenToEight implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "8"); 
     } 
    } 
    class ListenToNine implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "9"); 
     } 
    } 
    class ListenToZero implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "0"); 
     } 
    } 

     class ListenToAdd implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      TEMP = Double.parseDouble(jtfResult.getText()); 
         jtfResult.setText(""); 

     } 
    } 
    class ListenToSubtract implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "0"); 
     } 
    } 
    class ListenToMultiply implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "0"); 
     } 
    } 
    class ListenToDivide implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "0"); 
     } 
    } 
    class ListenToSolve implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
         SolveTEMP = jtfResult.getText(); 
      jtfResult.setText(TEMP + Double.parseDouble(jtfResult); 
     } 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JavaCalculator calc = new JavaCalculator(); 
     calc.pack(); 
     calc.setLocationRelativeTo(null); 
       calc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     calc.setVisible(true); 
    } 

} //JavaCalculator 
+1

Quelle est votre question? – duffymo

+0

Comment puis-je programmer le bouton '=' afin qu'il puisse effectuer la calcualtion? –

+2

Vous devez utiliser un tableau de boutons; cela réduira votre taille de code d'environ 70%. – SLaks

Répondre

0

Qu'est-ce que vous avez besoin est quelque chose qui calcule le résultat du calcul infix notated, jetez un oeil à la Shunting-Yard Algorithm.

Il existe un exemple en C++ sur la page de Wikipedia, mais il ne devrait pas être trop difficile de l'implémenter en Java.
Et puisque c'est la fonction principale de votre calculatrice, je vous conseille de ne pas saisir codez sur le Web dans ce cas (sauf que tout ce que vous voulez faire est de construire des interfaces graphiques de calculatrice).

1

Quelque part, vous devez garder la trace de quel bouton a été enfoncé. Lorsque les choses se produisent, vous devez stocker quelque chose dans une variable afin que vous puissiez vous souvenir de l'information ou que celle-ci disparaisse pour toujours.

Lorsqu'un utilisateur appuie sur l'un des boutons d'opérateur, ne le laissez pas entrer une autre valeur. Enregistrez le symbole de l'opérateur, puis laissez-les saisir une autre valeur. Vous pouvez littéralement avoir un String operator qui obtient le texte du bouton de l'opérateur. Ensuite, lorsque vous appuyez sur le bouton égal, vous devez vérifier quel opérateur vous avez stocké. Vous pouvez le faire avec une chaîne if/else if/else. Par conséquent, dans l'événement de pression de bouton de votre symbole, stockez le texte du symbole dans une variable, puis, dans l'événement de presse du bouton =, vérifiez que le symbole est dans la variable et agissez en conséquence. Alternativement, si vous vous sentez assez à l'aise avec les énumérations (on dirait que vous commencez juste, donc si vous n'êtes pas encore là, ignorez ceci), vous pourriez avoir une énumération de symboles qui vous permet de vérifier facilement les symboles avec un interrupteur.

0

en supposant que string1 est votre opération entière

utilisation MDAs

double result; 
string recurAndCheck(string operation){ 
    if(operation.indexOf("/")){ 
    String leftSide = recurAndCheck(operation.split("/")[0]); 
    string rightSide = recurAndCheck(operation.split("/")[1]); 
    result = Double.parseDouble(leftSide)/Double.parseDouble(rightSide); 

    } else if (..continue w/ *...) { 
    //same as above but change/with * 
    } else if (..continue w/ -) { 
    //change as above but change with - 
    } else if (..continuew with +) { 
    //change with add 
    } else { 
    return; 
    } 
} 
8

Ceci est le code de travail ...

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.util.*; 

public class JavaCalculator extends JFrame { 

    private JButton jbtNum1; 
    private JButton jbtNum2; 
    private JButton jbtNum3; 
    private JButton jbtNum4; 
    private JButton jbtNum5; 
    private JButton jbtNum6; 
    private JButton jbtNum7; 
    private JButton jbtNum8; 
    private JButton jbtNum9; 
    private JButton jbtNum0; 
    private JButton jbtEqual; 
    private JButton jbtAdd; 
    private JButton jbtSubtract; 
    private JButton jbtMultiply; 
    private JButton jbtDivide; 
    private JButton jbtSolve; 
    private JButton jbtClear; 
    private double TEMP; 
    private double SolveTEMP; 
    private JTextField jtfResult; 

    Boolean addBool = false; 
    Boolean subBool = false; 
    Boolean divBool = false; 
    Boolean mulBool = false; 

    String display = ""; 

    public JavaCalculator() { 

     JPanel p1 = new JPanel(); 
     p1.setLayout(new GridLayout(4, 3)); 
     p1.add(jbtNum1 = new JButton("1")); 
     p1.add(jbtNum2 = new JButton("2")); 
     p1.add(jbtNum3 = new JButton("3")); 
     p1.add(jbtNum4 = new JButton("4")); 
     p1.add(jbtNum5 = new JButton("5")); 
     p1.add(jbtNum6 = new JButton("6")); 
     p1.add(jbtNum7 = new JButton("7")); 
     p1.add(jbtNum8 = new JButton("8")); 
     p1.add(jbtNum9 = new JButton("9")); 
     p1.add(jbtNum0 = new JButton("0")); 
     p1.add(jbtClear = new JButton("C")); 

     JPanel p2 = new JPanel(); 
     p2.setLayout(new FlowLayout()); 
     p2.add(jtfResult = new JTextField(20)); 
     jtfResult.setHorizontalAlignment(JTextField.RIGHT); 
     jtfResult.setEditable(false); 

     JPanel p3 = new JPanel(); 
     p3.setLayout(new GridLayout(5, 1)); 
     p3.add(jbtAdd = new JButton("+")); 
     p3.add(jbtSubtract = new JButton("-")); 
     p3.add(jbtMultiply = new JButton("*")); 
     p3.add(jbtDivide = new JButton("/")); 
     p3.add(jbtSolve = new JButton("=")); 

     JPanel p = new JPanel(); 
     p.setLayout(new GridLayout()); 
     p.add(p2, BorderLayout.NORTH); 
     p.add(p1, BorderLayout.SOUTH); 
     p.add(p3, BorderLayout.EAST); 

     add(p); 

     jbtNum1.addActionListener(new ListenToOne()); 
     jbtNum2.addActionListener(new ListenToTwo()); 
     jbtNum3.addActionListener(new ListenToThree()); 
     jbtNum4.addActionListener(new ListenToFour()); 
     jbtNum5.addActionListener(new ListenToFive()); 
     jbtNum6.addActionListener(new ListenToSix()); 
     jbtNum7.addActionListener(new ListenToSeven()); 
     jbtNum8.addActionListener(new ListenToEight()); 
     jbtNum9.addActionListener(new ListenToNine()); 
     jbtNum0.addActionListener(new ListenToZero()); 

     jbtAdd.addActionListener(new ListenToAdd()); 
     jbtSubtract.addActionListener(new ListenToSubtract()); 
     jbtMultiply.addActionListener(new ListenToMultiply()); 
     jbtDivide.addActionListener(new ListenToDivide()); 
     jbtSolve.addActionListener(new ListenToSolve()); 
     jbtClear.addActionListener(new ListenToClear()); 
    } //JavaCaluclator() 

    class ListenToClear implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      //display = jtfResult.getText(); 
      jtfResult.setText(""); 
      addBool = false; 
      subBool = false; 
      mulBool = false; 
      divBool = false; 

      TEMP = 0; 
      SolveTEMP = 0; 
     } 
    } 

    class ListenToOne implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "1"); 
     } 
    } 

    class ListenToTwo implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "2"); 
     } 
    } 

    class ListenToThree implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "3"); 
     } 
    } 

    class ListenToFour implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "4"); 
     } 
    } 

    class ListenToFive implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "5"); 
     } 
    } 

    class ListenToSix implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "6"); 
     } 
    } 

    class ListenToSeven implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "7"); 
     } 
    } 

    class ListenToEight implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "8"); 
     } 
    } 

    class ListenToNine implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "9"); 
     } 
    } 

    class ListenToZero implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      display = jtfResult.getText(); 
      jtfResult.setText(display + "0"); 
     } 
    } 

    class ListenToAdd implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      TEMP = Double.parseDouble(jtfResult.getText()); 
      jtfResult.setText(""); 
      addBool = true; 
     } 
    } 

    class ListenToSubtract implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      TEMP = Double.parseDouble(jtfResult.getText()); 
      jtfResult.setText(""); 
      subBool = true; 
     } 
    } 

    class ListenToMultiply implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      TEMP = Double.parseDouble(jtfResult.getText()); 
      jtfResult.setText(""); 
      mulBool = true; 
     } 
    } 

    class ListenToDivide implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      TEMP = Double.parseDouble(jtfResult.getText()); 
      jtfResult.setText(""); 
      divBool = true; 
     } 
    } 

    class ListenToSolve implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      SolveTEMP = Double.parseDouble(jtfResult.getText()); 
      if (addBool == true) 
       SolveTEMP = SolveTEMP + TEMP; 
      else if (subBool == true) 
       SolveTEMP = SolveTEMP - TEMP; 
      else if (mulBool == true) 
       SolveTEMP = SolveTEMP * TEMP; 
      else if (divBool == true) 
          SolveTEMP = SolveTEMP/TEMP; 
      jtfResult.setText( Double.toString(SolveTEMP)); 

      addBool = false; 
      subBool = false; 
      mulBool = false; 
      divBool = false; 
     } 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JavaCalculator calc = new JavaCalculator(); 
     calc.pack(); 
     calc.setLocationRelativeTo(null); 
       calc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     calc.setVisible(true); 
    } 

} //JavaCalculator 
+1

Peut-être, mais il y a trop de redondance. Par exemple. 'display = jtfResult.getText(); jtfResult.setText (affichage + "X"); 'apparaît 10 fois, avec seulement" X "différent. –