2017-08-25 56 views
-2

我從網上下載了一個計算器程序,然後根據需要自定義它。編輯代碼後,當我添加假設2 + 3時,它會顯示正確的答案。但在此之後,如果我分裂/繁殖或做任何事情,它不會顯示正確的答案。重新添加/重新劃分不起作用

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

*「它沒有顯示正確答案」*您的問題是什麼? *「我也在努力......」* SO是問答網站,而不是服務檯。每個線程都應該有***一個明確的,具體的問題。一般提示:1)爲了更快地提供更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 2)請使用代碼格式設置代碼和代碼片段,結構化文檔(如HTML/XML或輸入/輸出)。爲此,請選擇文本並單擊郵件發佈/編輯表單頂部的「{}」按鈕。 –

+0

請不要介意。爲了更好的理解,我上傳了它! :(讓我編輯它 – Sid

+0

請檢查它,如果它在正確的形式。我真的很抱歉浪費你的時間:( – Sid

回答

0

我對代碼做了一些更改。這一個應該工作。這是拋出一個異常,因爲當您使用前一個操作的double類型輸出進行下一個操作時,使用Integer.parseInt(..)解析一個double值。

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

是的。 ..也許問題是與類型double&int ... :( – Sid

+0

是的,而不是改變類型,使用Double.parseDouble,因爲我在代碼中做到了這一點,這樣你也將滿足小數。也接受答案 –

+0

看起來你已經發布了我發佈的相同代碼,但是感謝這個想法...... – Sid