2015-10-17 75 views
0

我的代碼現在適用於求和,求減,乘法,除法。 然而,當我把10.0和2.0或者5.4和2放進去時,它不顯示小數。 我應該如何改變,然後它可以用於十進制?計算器不能有十進制

這是我現在的代碼。

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 


public class Calculator extends JFrame implements ActionListener { 

    // instance variables 
    JLabel num1Label = null; 
    JTextField num1Text = null; 
    JLabel num2Label = null; 
    JTextField num2Text = null; 
    JButton sumButton = null; 
    JButton multipleButton=null; 
    JButton divideButton=null; 
    JButton subtractButton = null; 
    JLabel ansLabel = null; 

    // constructor 
    public Calculator() { 
     setLayout(new GridBagLayout()); // set layout (how elements are arranged in window) 
     // **** label: num 1 
     GridBagConstraints layoutCon = new GridBagConstraints(); 
     layoutCon.gridx = 0; 
     layoutCon.gridy = 0; 
     layoutCon.insets = new Insets(10,10,10,10); 

     num1Label = new JLabel("Num 1:"); 
     add(num1Label,layoutCon); // added label to JFrame 


     // **** text field: num 1 
     layoutCon = new GridBagConstraints(); 
     layoutCon.gridx = 1; 
     layoutCon.gridy = 0; 
     layoutCon.insets = new Insets(10,10,10,10); 

     num1Text = new JTextField(20); 
     add(num1Text, layoutCon); 

     // **** label: num 2 
     layoutCon = new GridBagConstraints(); 
     layoutCon.gridx = 0; 
     layoutCon.gridy = 1; 
     layoutCon.insets = new Insets(10,10,10,10); 

     num2Label = new JLabel("Num 2:"); 
     add(num2Label,layoutCon); // added label to JFrame 


     // **** text field: num 2 
     layoutCon = new GridBagConstraints(); 
     layoutCon.gridx = 1; 
     layoutCon.gridy = 1; 
     layoutCon.insets = new Insets(10,10,10,10); 

     num2Text = new JTextField(20); 
     add(num2Text, layoutCon); 




     // **** Sum Button 
     layoutCon = new GridBagConstraints(); 
     layoutCon.gridx = 0; 
     layoutCon.gridy = 2; 
     layoutCon.insets = new Insets(10,10,10,10); 

     sumButton = new JButton("Sum"); 
     add(sumButton, layoutCon); 
     sumButton.addActionListener(this); // register sumButton with the ActionListener in Calculator 

     // Multiple Button 
     layoutCon= new GridBagConstraints(); 
     layoutCon.gridx=0; 
     layoutCon.gridy=4; 
     layoutCon.insets=new Insets(10,10,10,10); 

     multipleButton= new JButton("Multiple"); 
     add(multipleButton, layoutCon); 
     multipleButton.addActionListener(this); 

     // Divide Button 
     layoutCon = new GridBagConstraints(); 
     layoutCon.gridx = 0; 
     layoutCon.gridy = 5; 
     layoutCon.insets = new Insets(10,10,10,10); 

     divideButton = new JButton("Divide"); 
     add(divideButton, layoutCon); 
     divideButton.addActionListener(this); 

     // **** label: answer 
     layoutCon = new GridBagConstraints(); 
     layoutCon.gridx = 1; 
     layoutCon.gridy = 2; 
     layoutCon.insets = new Insets(10,10,10,10); 

     ansLabel = new JLabel("Answer"); 
     add(ansLabel,layoutCon); // added label to JFrame 





     // **** Subtract Button 
     layoutCon = new GridBagConstraints(); 
     layoutCon.gridx = 0; 
     layoutCon.gridy = 3; 
     layoutCon.insets = new Insets(10,10,10,10); 

     subtractButton = new JButton("Subtract"); 
     add(subtractButton, layoutCon); 
     subtractButton.addActionListener(this); // register subtractButton with the ActionListener in Calculator 

    } 

    public void actionPerformed(ActionEvent e) { 
     if (e.getActionCommand().equals("Sum")) { 
      ansLabel.setText("" + (Integer.parseInt(num1Text.getText()) + Integer.parseInt(num2Text.getText()))); 
     } 
     else if (e.getActionCommand().equals("Subtract")) { 
      ansLabel.setText("" + (Integer.parseInt(num1Text.getText()) - Integer.parseInt(num2Text.getText()))); 
     } 
     else if (e.getActionCommand().equals("Multiple")){ 
      ansLabel.setText(""+(double)(Integer.parseInt(num1Text.getText())*Integer.parseInt(num2Text.getText()))); 
     } 
     else if (e.getActionCommand().equals("Divide")){ 
      ansLabel.setText(""+(Integer.parseInt(num1Text.getText())/Integer.parseInt(num2Text.getText()))); 

     } 
     } 

    public static void main(String[] args) { 
     Calculator calc = new Calculator(); 

     calc.pack(); // resizes window (JFrame) so you can see the elements in it 
     calc.setVisible(true); // make window visible 
     calc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //exit program when close window 
    } 

} 
+1

我想不把它們解析成整數是一個好的開始。 – ChiefTwoPencils

+0

使用Double.parseDouble() –

回答

0

你使用

Integer.parseInt(num1Text.getText()); 

它將String解析爲i NT。

隨着

Double.parseDouble(num1Text.getText()); 

你得到一個雙。

請注意,你可能要趕上NumberFormatException,因爲你最likley不想讓你的程序停止對惡意用戶輸入:

double num1; 
try 
{ 
    num1 = Double.parseDouble(num1Text.getText()); 
} catch (NumberFormatException e) 
{ 
    // either use a default value or give feedback to the user on what he did wrong 
    // for example 
    num1 = 1; 
} 

如果你不希望打印的雙重價值,如果用戶只輸入整數值,那麼你可以首先嚐試解析爲int,捕獲異常(如果有),然後解析爲double。


另一個錯誤在你divison行:

ansLabel.setText(
    ""+(Integer.parseInt(num1Text.getText())/Integer.parseInt(num2Text.getText()))); 

你不檢查,如果第二個參數是= 0,否則你可能會除以0!

爲了保持代碼的可讀性,你可能要用於解析字符串轉換成數字創造一個額外的方法:

private static double parseDouble(String s) 
{ 
    double num; 
    try 
    { 
     num = Double.parseDouble(num1Text.getText()); 
    } catch (NumberFormatException e) 
    { 
     // either use a default value or give feedback to the user on what he did wrong 
     // for example 
     num = 1; 
    } 

    return num; 
} 

0的可能修正爲師可能是:

double num1 = parseDouble(num1Text.getText()); 
double num2 = parseDouble(num2Text.getText()); 

String command = e.getActionCommand(); 

if (command.equals("Sum")) 
{ 
    ansLabel.setText("" + (num1 + num2)); 
} else if (command.equals("Subtract")) 
{ 
    ansLabel.setText("" + (num1 - num2)); 
} else if (command.equals("Multiple")) 
{ 
    ansLabel.setText("" + (num1 * num2)); 
} else if (command.equals("Divide")) 
{ 
    if (num2 == 0) 
    { 
     ansLabel.setText("ERROR: Division by zero!"); 
    } else 
    { 
     ansLabel.setText("" + (num1/num2)); 
    } 
} 
+0

我應該在哪裏添加一些讓num2不是= 0? –

+0

非常感謝。 –

0

應該使用雙倍數據類型而不是整數4個操作

1

actionPerformed是解析其輸入爲int,因此對他們的操作。如果您想使用浮點數,請嘗試使用double

1

解析爲一個整數不能處理雙重或任何浮點數(十進制)這樣改變你的actionPerformed解析,而不是增加一倍的或解析INT的:

public void actionPerformed(ActionEvent e) { 
    if (e.getActionCommand().equals("Sum")) { 
     ansLabel.setText("" + (Double.parseDouble(num1Text.getText()) + Double.parseDouble(num2Text.getText()))); 
    } 
    else if (e.getActionCommand().equals("Subtract")) { 
     ansLabel.setText("" + (Double.parseDouble(num1Text.getText()) - Double.parseDouble(num2Text.getText()))); 
    } 
    else if (e.getActionCommand().equals("Multiple")){ 
     ansLabel.setText(""+(double)(Double.parseDouble(num1Text.getText())*Double.parseDouble(num2Text.getText()))); 
    } 
    else if (e.getActionCommand().equals("Divide")){ 
     ansLabel.setText(""+(Double.parseDouble(num1Text.getText())/Double.parseDouble(num2Text.getText()))); 

    } 
} 
0

像這樣:

public void actionPerformed(ActionEvent e) 
    { 
     if(e.getActionCommand().equals("Sum")) 
     ansLabel.setText("" + (Double. 
       parseDouble(num1Text.getText()) + Double.parseDouble( 
         num2Text.getText()))); 
    // etc.