栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现的计算器功能示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现的计算器功能示例

本文实例讲述了java实现的计算器功能。分享给大家供大家参考,具体如下:

package awtDemo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.Jframe;
import javax.swing.JPanel;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class Calculator extends Jframe implements ActionListener {
    private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",
     "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };
    private final String[] COMMAND = { "Backspace", "CE", "C" };
    private JButton keys[] = new JButton[KEYS.length];
    private JButton commands[] = new JButton[COMMAND.length];
    private JTextField resultText = new JTextField("0");
    private boolean firstDigit = true;
    private double resultNum = 0.0;
    private String operator = "=";
    private boolean operatevalidFlag = true;
    public Calculator() {
 init();
 this.setBackground(Color.LIGHT_GRAY);
 this.setTitle("www.jb51.net - 计算器");
 this.setLocation(500, 300);
 this.setResizable(false);
 this.pack();
    }
    private void init() {
 resultText.setHorizontalAlignment(JTextField.RIGHT);
 resultText.setEditable(false);
 resultText.setBackground(Color.white);
 JPanel calckeysPanel = new JPanel();
 calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3));
 for (int i = 0; i < KEYS.length; i++) {
     keys[i] = new JButton(KEYS[i]);
     calckeysPanel.add(keys[i]);
     keys[i].setForeground(Color.blue);
 }
 keys[3].setForeground(Color.red);
 keys[8].setForeground(Color.red);
 keys[13].setForeground(Color.red);
 keys[18].setForeground(Color.red);
 keys[19].setForeground(Color.red);
 JPanel commandsPanel = new JPanel();
 commandsPanel.setLayout(new GridLayout(1, 3, 3, 3));
 for (int i = 0; i < COMMAND.length; i++) {
     commands[i] = new JButton(COMMAND[i]);
     commandsPanel.add(commands[i]);
     commands[i].setForeground(Color.red);
 }
 JPanel panel1 = new JPanel();
 panel1.setLayout(new BorderLayout(3, 3));
 panel1.add("North", commandsPanel);
 panel1.add("West", calckeysPanel);
 JPanel top = new JPanel();
 top.setLayout(new BorderLayout());
 top.add("Center", resultText);
 getContentPane().setLayout(new BorderLayout(3, 5));
 getContentPane().add("North", top);
 getContentPane().add("Center", panel1);
 for (int i = 0; i < KEYS.length; i++) {
     keys[i].addActionListener(this);
 }
 for (int i = 0; i < COMMAND.length; i++) {
     commands[i].addActionListener(this);
 }
    }
    public void actionPerformed(ActionEvent e) {
 String label = e.getActionCommand();
 if (label.equals(COMMAND[0])) {
     handleBackspace();
 } else if (label.equals(COMMAND[1])) {
     resultText.setText("0");
 } else if (label.equals(COMMAND[2])) {
     handleC();
 } else if ("0123456789.".indexOf(label) >= 0) {
     handleNumber(label);
 } else {
     handleOperator(label);
 }
    }
    private void handleBackspace() {
 String text = resultText.getText();
 int i = text.length();
 if (i > 0) {
     text = text.substring(0, i - 1);
     if (text.length() == 0) {
  resultText.setText("0");
  firstDigit = true;
  operator = "=";
     } else {
  resultText.setText(text);
     }
 }
    }
    private void handleNumber(String key) {
 if (firstDigit) {
     resultText.setText(key);
 } else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) {
     resultText.setText(resultText.getText() + ".");
 } else if (!key.equals(".")) {
     resultText.setText(resultText.getText() + key);
 }
 firstDigit = false;
    }
    private void handleC() {
 resultText.setText("0");
 firstDigit = true;
 operator = "=";
    }
    private void handleOperator(String key) {
 if (operator.equals("/")) {
     if (getNumberFromText() == 0.0) {
  operatevalidFlag = false;
  resultText.setText("除数不能为零");
     } else {
  resultNum /= getNumberFromText();
     }
 } else if (operator.equals("1/x")) {
     if (resultNum == 0.0) {
  operatevalidFlag = false;
  resultText.setText("零没有倒数");
     } else {
  resultNum = 1 / resultNum;
     }
 } else if (operator.equals("+")) {
     resultNum += getNumberFromText();
 } else if (operator.equals("-")) {
     resultNum -= getNumberFromText();
 } else if (operator.equals("*")) {
     resultNum *= getNumberFromText();
 } else if (operator.equals("sqrt")) {
     resultNum = Math.sqrt(resultNum);
 } else if (operator.equals("%")) {
     resultNum = resultNum / 100;
 } else if (operator.equals("+/-")) {
     resultNum = resultNum * (-1);
 } else if (operator.equals("=")) {
     resultNum = getNumberFromText();
 }
 if (operatevalidFlag) {
     long t1;
     double t2;
     t1 = (long) resultNum;
     t2 = resultNum - t1;
     if (t2 == 0) {
  resultText.setText(String.valueOf(t1));
     } else {
  resultText.setText(String.valueOf(resultNum));
     }
 }
 operator = key;
 firstDigit = true;
 operatevalidFlag = true;
    }
    private double getNumberFromText() {
 double result = 0;
 try {
     result = Double.valueOf(resultText.getText()).doublevalue();
 } catch (NumberFormatException e) {
 }
 return result;
    }
    public static void main(String args[]) {
 Calculator calculator1 = new Calculator();
 calculator1.setVisible(true);
 calculator1.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
    }
}

运行效果:

PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

在线一元函数(方程)求解计算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算:
http://tools.jb51.net/jisuanqi/jsqkexue

在线计算器_标准计算器:
http://tools.jb51.net/jisuanqi/jsq

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/142442.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号