Java 计算器可以';我没有十进制数

Java 计算器可以';我没有十进制数,java,decimal,calculator,Java,Decimal,Calculator,我的代码现在适用于和、减、乘、除。 然而,当我把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 J

我的代码现在适用于和、减、乘、除。 然而,当我把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
    }

}

对于4个操作,您应该使用双精度数据类型而不是整数

actionPerformed
将其输入解析为
int
,并对其进行操作。如果要使用浮点数,请尝试改用
double

作为整数解析无法处理double或任何浮点数(十进制),因此请更改执行的操作以解析double或解析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())));

    }
}
像这样:

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

Integer.parseInt(num1Text.getText());
它将
字符串
解析为int

你有双人间

请注意,您可能希望捕获
NumberFormatException
,因为您很可能不希望您的程序在格式错误的用户输入时停止:

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


除数行中的另一个错误:

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));
    }
}

我想不将它们解析为整数将是一个好的开始
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));
    }
}