2017-08-25 3 views
-2

J'ai téléchargé un programme Calculator à partir d'Internet en le personnalisant comme je le souhaite. Après avoir édité le code, quand j'ajouterais supposer 2 + 3 il montrera la bonne réponse. Mais après cela, si je divise/multiplie ou fais quelque chose, ce n'est pas montrer la bonne réponse.Le rajout/re-division ne fonctionnait pas

equalsButton.addActionListener(new ActionListener() 
    { 

     public void actionPerformed(ActionEvent event) 
     { 
      if (!numberCalc.getText().isEmpty()) 
      { 
       int number = Integer.parseInt(numberCalc.getText()); 
       String calc; 
       double calculate; 

       switch (calcOperation){ 

        case 1: 
        calculate = currentCalc + number; 
        currentCalc = calculate; 
        calc = String.valueOf(calculate); 
        numberCalc.setText(calc); 
        break; 

        case 2: 
        calculate = currentCalc - number; 
        currentCalc = calculate; 
        calc = String.valueOf(calculate); 
        numberCalc.setText(calc); 
        break; 

        case 3: 
        calculate = currentCalc * number; 
        currentCalc = calculate; 
        calc = String.valueOf(calculate); 
        numberCalc.setText(calc); 
        break; 

        case 4: 
        calculate = currentCalc/number; 
        currentCalc = calculate; 
        if(currentCalc == 0){ 
         JOptionPane.showMessageDialog(null, "You Can't divide 0! Have a good day!"); 
        } 
        calc = String.valueOf(calculate); 
        numberCalc.setText(calc); 
        break; 

        case 5: 
        numberCalc.setText(null); 
        break; 
       } 

      } 
      } 
     }); 
+1

* "ce n'est pas la bonne réponse" * Quelle est votre question? * "J'essayais aussi de ..." * SO est un site de questions et réponses, pas un service d'assistance. Chaque fil devrait avoir *** un *** clair, spécifique, question. Conseils généraux: 1) Pour une meilleure aide plus rapidement, postez un [MCVE] ou [Short, Self Contained, Example correct] (http://www.sscce.org/). 2) Veuillez utiliser la mise en forme du code pour les extraits de code et de code, les documents structurés comme HTML/XML ou les entrées/sorties. Pour ce faire, sélectionnez le texte et cliquez sur le bouton «{}» situé en haut du formulaire de publication/modification de message. –

+0

S'il vous plaît ne me dérange pas. Je l'ai téléchargé pour une meilleure compréhension! :(Permettez-moi de l'éditer – Sid

+0

S'il vous plaît vérifier s'il est en bonne forme.Je suis vraiment désolé de perdre votre temps. :( – Sid

Répondre

0

J'ai modifié votre code. Celui-ci devrait fonctionner. Il lançait une exception car vous analysiez une valeur double en utilisant Integer.parseInt (..) lorsque vous utilisiez la sortie de type double de votre opération précédente dans l'opération suivante.

package com.example; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.util.*; 

import javax.imageio.ImageIO; 
import javax.swing.*; 


    public class SimpleCalc implements ActionListener{ 

     JFrame guiFrame; 
     JPanel buttonPanel; 
     JTextField numberCalc; 
     int calcOperation = 0; 
     double currentCalc; 

     //Note: Typically the main method will be in a 
     //separate class. As this is a simple one class 
     //example it's all in the one class. 
     public static void main(String[] args) { 

      //Use the event dispatch thread for Swing components 
      EventQueue.invokeLater(new Runnable() 
      { 

       @Override 
       public void run() 
       { 

        new SimpleCalc();   
       } 
      }); 

     } 

     public SimpleCalc() 
     { 
      guiFrame = new JFrame(); 

      //make sure the program exits when the frame closes 
      guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      guiFrame.setTitle("Calculator Project"); 
      guiFrame.setSize(400,400); 

      //This will center the JFrame in the middle of the screen 
      guiFrame.setLocationRelativeTo(null); 

      numberCalc = new JTextField(); 
      numberCalc.setHorizontalAlignment(JTextField.RIGHT); 
      numberCalc.setLayout(null); 
      numberCalc.setSize(100,400); 
      numberCalc.setEditable(false); 

      guiFrame.add(numberCalc, BorderLayout.NORTH); 

      buttonPanel = new JPanel(); 


      buttonPanel.setLayout(new GridLayout(4,4)); 
      guiFrame.add(buttonPanel, BorderLayout.CENTER); 

      //Add the number buttons 
      for (int i=0;i<10;i++) 
      { 
       addButton(buttonPanel, String.valueOf(i)); 
      } 

      JButton clrButton = new JButton("C"); 
      clrButton.setActionCommand("C"); 

      OperatorAction clrAction = new OperatorAction(5); 
      clrButton.addActionListener(clrAction); 

      JButton subsButton = new JButton("*"); 
      subsButton.setActionCommand("*"); 

      OperatorAction subsAction = new OperatorAction(3); 
      subsButton.addActionListener(subsAction); 

      JButton divideButton = new JButton("/"); 
      divideButton.setActionCommand("/"); 

      OperatorAction divideAction = new OperatorAction(4); 
      divideButton.addActionListener(divideAction); 


      JButton addButton = new JButton("+"); 
      addButton.setActionCommand("+"); 

      OperatorAction subAction = new OperatorAction(1); 
      addButton.addActionListener(subAction); 

      JButton subButton = new JButton("-"); 
      subButton.setActionCommand("-"); 

      OperatorAction addAction = new OperatorAction(2); 
      subButton.addActionListener(addAction); 

      JButton equalsButton = new JButton("="); 
      equalsButton.setActionCommand("="); 
      equalsButton.addActionListener(new ActionListener() 
      { 

       public void actionPerformed(ActionEvent event) 
       { 
        if (!numberCalc.getText().isEmpty()) 
        { 
         int number = Integer.parseInt(numberCalc.getText()); 
         String calc; 
         double calculate; 

         switch (calcOperation){ 

          case 1: 
          calculate = currentCalc + number; 
          currentCalc = calculate; 
          calc = String.valueOf(calculate); 
          numberCalc.setText(calc); 
          break; 

          case 2: 
          calculate = currentCalc - number; 
          currentCalc = calculate; 
          calc = String.valueOf(calculate); 
          numberCalc.setText(calc); 
          break; 

          case 3: 
          calculate = currentCalc * number; 
          currentCalc = calculate; 
          calc = String.valueOf(calculate); 
          numberCalc.setText(calc); 
          break; 

          case 4: 
          calculate = currentCalc/number; 
          currentCalc = calculate; 
          if(currentCalc == 0){ 
           JOptionPane.showMessageDialog(null, "You Can't divide 0! Have a good day!"); 
          } 
          calc = String.valueOf(calculate); 
          numberCalc.setText(calc); 
          break; 

          case 5: 
          numberCalc.setText(null); 
          break; 
         } 

        } 




        } 
       }); 

      buttonPanel.add(addButton); 
      buttonPanel.add(subButton); 
      buttonPanel.add(subsButton); 
      buttonPanel.add(divideButton); 
      buttonPanel.add(equalsButton); 
      buttonPanel.add(clrButton); 
      guiFrame.setVisible(true); 
     } 

     //All the buttons are following the same pattern 
     //so create them all in one place. 
     private void addButton(Container parent, String name) 
     { 
      JButton but = new JButton(name); 
      but.setActionCommand(name); 
      but.addActionListener(this); 
      parent.add(but); 
     } 


     @Override 
     public void actionPerformed(ActionEvent event) 
     { 
      //get the Action Command text from the button 
      String action = event.getActionCommand(); 

      //set the text using the Action Command text 
      numberCalc.setText(action);  
     } 



     private class OperatorAction implements ActionListener 
     { 
      private int operator; 

      public OperatorAction(int operation) 
      { 
       operator = operation; 
      } 

      public void actionPerformed(ActionEvent event) 
      { 
       currentCalc = Double.parseDouble(numberCalc.getText()); 
       calcOperation = operator; 
      } 
     } 
    } 
+0

Ouais. .. Peut-être le problème est avec le type double & int ... :( – Sid

+0

oui au lieu de changer les types, utilisez Double.parseDouble comme je l'ai fait dans le code.Cette façon vous permettra également de satisfaire les nombres décimaux.Acceptez également la réponse –

+0

Il semble que vous ayez posté le même code que celui que j'ai posté, mais merci pour l'idée ... – Sid