高手帮忙用Java设计个计算器程序!

用Java实现一个applet计算器程序,要有+,-,*,/功能。会做的朋友帮帮忙,小弟先谢过各位了!还有更简单点的答案吗?

诗诗2009 2021-09-18 16:36 249 次浏览 赞 160

最新问答

  • 宜木构思家具

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

    public class CalcAppDemo extends Frame{
    private TextField t_result;
    private Panel p_main; //主面板
    private Panel p_num; //数字面板
    private Panel p_oper; //作符面板
    private Panel p_show; //显示面板
    private Button b_num[]; //数字按钮
    private Button b_oper[]; //作符面板

    public CalcAppDemo(String title){
    setTitle(title);
    t_result = new TextField("0.0", 21);
    p_main = new Panel();
    p_num = new Panel();
    p_oper = new Panel();
    p_show = new Panel();
    p_main.setLayout(new BorderLayout());
    p_num.setLayout(new GridLayout(4, 3, 1, 1));
    p_oper.setLayout(new GridLayout(4, 2, 1, 1));

    b_num = new Button[12];
    for(int i=0; i<9; i++)
    {
    b_num[i] = new Button(new Integer(i+1).toString());
    }
    b_num[9] = new Button("0");
    b_num[10] = new Button("cls");
    b_num[11] = new Button(".");
    for(int i=0; i<12; i++)
    {
    p_num.add(b_num[i]);
    }

    b_oper = new Button[8];
    b_oper[0] = new Button("+");
    b_oper[1] = new Button("-");
    b_oper[2] = new Button("*");
    b_oper[3] = new Button("/");
    b_oper[4] = new Button("pow");
    b_oper[5] = new Button("sqrt");
    b_oper[6] = new Button("+/-");
    b_oper[7] = new Button("=");
    for(int i=0; i<8; i++) //
    {
    p_oper.add(b_oper[i]);
    }

    t_result.setEditable(false);
    p_show.add(t_result, BorderLayout.NORTH);
    p_main.add(p_show, BorderLayout.NORTH);
    p_main.add(p_num, BorderLayout.WEST);
    p_main.add(p_oper, BorderLayout.EAST);
    this.add(p_main, BorderLayout.CENTER);
    setSize(400, 400);
    setResizable(false);
    pack();

    this.addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    });
    ButtonListener b1 = new ButtonListener();
    for(int i=0; i<12; i++)
    {
    b_num[i].addActionListener(b1);
    }
    for(int i=0; i<8; i++)
    {
    b_oper[i].addActionListener(b1);
    }
    }

    class ButtonListener implements ActionListener
    {
    private String lastOp; //存储上一此作符
    private String strVal; //存储数字对应的字符串
    private double total; //总数
    private double number; //存储新输入的数
    private boolean firsttime; //判断是否第一次按下的是作符按钮
    private boolean operatorPressed;//判断是否已经按过作符按钮

    ButtonListener()
    {
    firsttime = true;
    strVal = "";
    }

    //处理器
    public void actionPerformed(ActionEvent e)
    {
    String s = ((Button)e.getSource()).getLabel().trim();

    if(Character.isDigit(s.charAt(0)))
    {//判断是作数还是作符
    handleNumber(s);
    }
    else
    {
    calculate(s);
    }
    }

    //判断是一元作符还是二元作符,并根据作符类型做计算
    void calculate(String op)
    {
    operatorPressed = true;

    if(firsttime&&! isUnary(op))
    {
    total = getNumberOnDisplay();
    firsttime = false;
    }
    if(isUnary(op))
    {
    handleUnaryOp(op);
    }
    else if(lastOp != null)
    {
    handleBinaryOp(lastOp);
    }
    if(! isUnary(op))
    {
    lastOp = op;
    }
    }

    //判断是否一元作符
    boolean isUnary(String s)
    {
    return s.equals("=")
    ||s.equals("cls")||s.equals("sqrt")
    ||s.equals("+/-")||s.equals(".");
    }

    //处理一元作符
    void handleUnaryOp(String op)
    {
    if(op.equals("+/-"))
    {//
    number = negate(getNumberOnDisplay() + "");
    t_result.setText("");
    t_result.setText(number + "");
    return;
    }else if(op.equals("."))
    {
    handleDecPoint();
    return;
    }else if(op.equals("sqrt"))
    {
    number = Math.sqrt(getNumberOnDisplay());
    t_result.setText("");
    t_result.setText(number + "");
    return;
    }else if(op.equals("="))
    {//
    if(lastOp!= null && !isUnary(lastOp))
    {
    handleBinaryOp(lastOp);
    }
    lastOp = null;
    firsttime = true;
    return;
    }else
    {
    clear();
    }
    }

    //处理二元运算符
    void handleBinaryOp(String op)
    {
    if(op.equals("+"))
    {
    total +=number;
    }else if(op.equals("-"))
    {
    total -=number;
    }else if(op.equals("*"))
    {
    total *=number;
    }else if(op.equals("/"))
    {
    try
    {
    total /=number;
    }catch(ArithmeticException ae){}
    }else if(op.equals("pow"))
    total = Math.pow(total, number);
    //t_result.setText("");
    lastOp = null;
    // strVal = "";
    number = 0;
    t_result.setText(total + "");
    }

    //该方法用于处理数字按钮
    void handleNumber(String s)
    {
    if(!operatorPressed)
    {
    strVal += s;
    }else
    {
    operatorPressed = false;
    strVal = s;
    }
    //
    number = new Double(strVal).doubleValue();
    t_result.setText("");
    t_result.setText(strVal);
    }

    //该方法用于按下"."按钮
    void handleDecPoint()
    {
    operatorPressed = false;
    //
    if(strVal.indexOf(".")<0)
    {
    strVal += ".";
    }
    t_result.setText("");
    t_result.setText(strVal);
    }

    //该方法用于将一个数求反
    double negate(String s)
    {
    operatorPressed = false;
    //如果是一个整数,去掉小数点后面的0
    if(number == (int)number)
    {
    s = s.substring(0,s.indexOf("."));
    }

    //如果无"-"增加在该数的前面
    if(s.indexOf("-")<0)
    {
    strVal = "-" + s;
    }
    else
    {
    strVal = s.substring(1);
    }
    return new Double(strVal).doubleValue();
    }

    //将显示框中的值转换成Double
    double getNumberOnDisplay()
    {
    return new Double(t_result.getText()).doubleValue();
    }

    //清除屏幕并设置所有的标识
    void clear()
    {
    firsttime = true;
    lastOp = null;
    strVal = "";
    total = 0;
    number = 0;
    t_result.setText("0");
    }
    }

    public static void main(String[] args) {
    CalcAppDemo c = new CalcAppDemo("简单的计算器程序");
    c.setVisible(true);
    }

    }

    浏览 446赞 108时间 2023-09-09
  • 武汉碧海蓝天

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

    public class Calculator extends JFrame {

    private static final long serialVersionUID = 1L;

    private Container container;

    private GridBagLayout layout;

    private GridBagConstraints constraints;

    private JTextField displayField;// 计算结果显示区

    private String lastCommand;// 保存+,-,*,/,=命令

    private double result;// 保存计算结果

    private boolean start;// 判断是否为数字的开始

    public Calculator() {

    super("Calculator");
    container = getContentPane();
    layout = new GridBagLayout();
    container.setLayout(layout);
    constraints = new GridBagConstraints();
    start = true;
    result = 0;
    lastCommand = "=";
    displayField = new JTextField(20);
    displayField.setHorizontalAlignment(JTextField.RIGHT);
    constraints.gridx = 0;
    constraints.gridy = 0;
    constraints.gridwidth = 4;
    constraints.gridheight = 1;
    constraints.fill = GridBagConstraints.BOTH;
    constraints.weightx = 100;
    constraints.weighty = 100;
    layout.setConstraints(displayField, constraints);
    container.add(displayField);
    ActionListener insert = new InsertAction();
    ActionListener command = new CommandAction();
    addButton("Backspace", 0, 1, 2, 1, insert);
    addButton("CE", 2, 1, 1, 1, insert);
    addButton("C", 3, 1, 1, 1, insert);
    addButton("7", 0, 2, 1, 1, insert);
    addButton("8", 1, 2, 1, 1, insert);
    addButton("9", 2, 2, 1, 1, insert);
    addButton("/", 3, 2, 1, 1, command);
    addButton("4", 0, 3, 1, 1, insert);
    addButton("5", 1, 3, 1, 1, insert);
    addButton("6", 2, 3, 1, 1, insert);
    addButton("*", 3, 3, 1, 1, command);
    addButton("1", 0, 4, 1, 1, insert);
    addButton("2", 1, 4, 1, 1, insert);
    addButton("3", 2, 4, 1, 1, insert);
    addButton("-", 3, 4, 1, 1, command);
    addButton("0", 0, 5, 1, 1, insert);
    addButton("+/-", 1, 5, 1, 1, insert);// 保存"-"负数,"+"没有实用价值
    addButton(".", 2, 5, 1, 1, insert);
    addButton("+", 3, 5, 1, 1, command);
    addButton("=", 0, 6, 4, 1, command);
    setSize(300, 300);
    setVisible(true);

    }

    private void addButton(String label, int row, int column, int with,
    int height, ActionListener listener) {

    JButton button = new JButton(label);
    constraints.gridx = row;
    constraints.gridy = column;
    constraints.gridwidth = with;
    constraints.gridheight = height;
    constraints.fill = GridBagConstraints.BOTH;
    button.addActionListener(listener);
    layout.setConstraints(button, constraints);
    container.add(button);
    }

    private class InsertAction implements ActionListener {

    public void actionPerformed(ActionEvent event) {

    String input = event.getActionCommand();
    if (start) {
    displayField.setText("");
    start = false;
    if (input.equals("+/-"))
    displayField.setText(displayField.getText() + "-");
    }

    if (!input.equals("+/-")) {
    if (input.equals("Backspace")) {
    String str = displayField.getText();
    if (str.length() > 0)
    displayField
    .setText(str.substring(0, str.length() - 1));
    } else if (input.equals("CE") || input.equals("C")) {
    displayField.setText("0");
    start = true;
    } else
    displayField.setText(displayField.getText() + input);
    }
    }
    }

    private class CommandAction implements ActionListener {

    public void actionPerformed(ActionEvent evt) {
    String command = evt.getActionCommand();
    if (start) {
    lastCommand = command;
    } else {
    calculate(Double.parseDouble(displayField.getText()));
    lastCommand = command;
    start = true;
    }
    }
    }

    public void calculate(double x) {
    if (lastCommand.equals("+"))
    result += x;
    else if (lastCommand.equals("-"))
    result -= x;
    else if (lastCommand.equals("*"))
    result *= x;
    else if (lastCommand.equals("/"))
    result /= x;
    else if (lastCommand.equals("="))
    result = x;
    displayField.setText("" + result);
    }

    public static void main(String[] args) {
    Calculator calculator = new Calculator();
    calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    }

    主要考虑到java是面向对象,代希望楼主满意.呵呵

    浏览 386赞 127时间 2022-12-17
  • xiaoqiao945

    原来这就叫做编程,密密麻麻啊!

    浏览 374赞 84时间 2022-08-30

高手帮忙用Java设计个计算器程序!

用Java实现一个applet计算器程序,要有+,-,*,/功能。会做的朋友帮帮忙,小弟先谢过各位了!还有更简单点的答案吗?