[java]代码库import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

import java.awt.*;

import java.math.BigDecimal;

import java.math.MathContext;

import java.math.RoundingMode;

import java.awt.Color;

/**

* java版计算器

*/

public class Calculator extends JFrame {

final int WIN_W = 250, WIN_H = 250;

JPanel myPanel, panelSuper;

public Calculator() {

// 主面板

panelSuper = new JPanel();

panelSuper.setLayout(null);

// 设置窗口位置

double width = Toolkit.getDefaultToolkit().getScreenSize().width;

double height = Toolkit.getDefaultToolkit().getScreenSize().height;

this.setBounds((int) (width - WIN_W) / 2, (int) (height - WIN_H) / 2,

WIN_W, WIN_H);

// 窗口配置

this.setTitle("java版计算器");

this.validate();

this.setResizable(false);

this.setVisible(true);

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

// 添加计算器按钮面板

myPanel = new MyPanel();

this.add(myPanel, BorderLayout.CENTER);

}

public static void main(String[] args) {

new Calculator();

}

/**

* 计算器按钮面板类

*/

class MyPanel extends JPanel implements ActionListener {

JButton button1, button2, button3, button4, button5, button6, button7,

button8, button9, button0, buttonJia, buttonJian, buttonCheng,

buttonChu, buttonDeng, buttonDian, buttonC, buttonDel,

buttonZF, buttonGH;

JTextField jTextField; // 计算器显示屏

char oper; // 操作符

String key, allKey = "1234567890.±del", jjccKey = "+-*/";

BigDecimal d1, d2;

boolean first;

public MyPanel() {

// 设置布局

this.setLayout(new FlowLayout(FlowLayout.LEFT, 4, 5));

// 计算器显示屏

jTextField = new JTextField(21);

jTextField.setHorizontalAlignment(JTextField.RIGHT);

jTextField.setEditable(false);

jTextField.setBackground(new Color(255, 255, 255));

jTextField.setText("0");

this.add(jTextField);

// 计算器按钮

button1 = new JButton("1");

button2 = new JButton("2");

button3 = new JButton("3");

button4 = new JButton("4");

button5 = new JButton("5");

button6 = new JButton("6");

button7 = new JButton("7");

button8 = new JButton("8");

button9 = new JButton("9");

button0 = new JButton("0");

buttonJia = new JButton("+");

buttonJian = new JButton("-");

buttonCheng = new JButton("*");

buttonChu = new JButton("/");

buttonDeng = new JButton("=");

buttonDian = new JButton(".");

buttonDel = new JButton("del");

buttonC = new JButton("c");

buttonZF = new JButton("±");

buttonGH = new JButton("√");

button1.setPreferredSize(new Dimension(55, 30));

button2.setPreferredSize(new Dimension(55, 30));

button3.setPreferredSize(new Dimension(55, 30));

button4.setPreferredSize(new Dimension(55, 30));

button5.setPreferredSize(new Dimension(55, 30));

button6.setPreferredSize(new Dimension(55, 30));

button7.setPreferredSize(new Dimension(55, 30));

button8.setPreferredSize(new Dimension(55, 30));

button9.setPreferredSize(new Dimension(55, 30));

button0.setPreferredSize(new Dimension(55, 30));

buttonJia.setPreferredSize(new Dimension(55, 30));

buttonJian.setPreferredSize(new Dimension(55, 30));

buttonCheng.setPreferredSize(new Dimension(55, 30));

buttonChu.setPreferredSize(new Dimension(55, 30));

buttonDeng.setPreferredSize(new Dimension(55, 30));

buttonDian.setPreferredSize(new Dimension(55, 30));

buttonDel.setPreferredSize(new Dimension(55, 30));

buttonC.setPreferredSize(new Dimension(55, 30));

buttonZF.setPreferredSize(new Dimension(55, 30));

buttonGH.setPreferredSize(new Dimension(55, 30));

this.add(buttonDel);

this.add(buttonC);

this.add(buttonZF);

this.add(buttonGH);

this.add(button1);

this.add(button2);

this.add(button3);

this.add(buttonJia);

this.add(button4);

this.add(button5);

this.add(button6);

this.add(buttonJian);

this.add(button7);

this.add(button8);

this.add(button9);

this.add(buttonCheng);

this.add(button0);

this.add(buttonDian);

this.add(buttonDeng);

this.add(buttonChu);

buttonDel.addActionListener(this);

buttonC.addActionListener(this);

buttonZF.addActionListener(this);

buttonGH.addActionListener(this);

button1.addActionListener(this);

button2.addActionListener(this);

button3.addActionListener(this);

button4.addActionListener(this);

button5.addActionListener(this);

button6.addActionListener(this);

button7.addActionListener(this);

button8.addActionListener(this);

button9.addActionListener(this);

button0.addActionListener(this);

buttonJia.addActionListener(this);

buttonJian.addActionListener(this);

buttonCheng.addActionListener(this);

buttonChu.addActionListener(this);

buttonDeng.addActionListener(this);

buttonDian.addActionListener(this);

// 计算器初始化

init();

}

/**

* 计算器初始化

*/

public void init() {

d1 = new BigDecimal("0");

d1 = new BigDecimal("0");

key = "=";

oper = '=';

jTextField.setText("0");

first = true; // 用于标记是否进行连续操作(例如按键顺序为“9*9====”,第一次等于first由true变为false,如果!first,按等号相当于用上一次的结果与第二个操作数相乘)

}

/**

* 按钮监听

*/

public void actionPerformed(ActionEvent e) {

JButton b = (JButton) e.getSource();

if (b == buttonDian) { // 按下.

jTextField.setText(jTextField.getText() + ".");

if (first) {

d2 = d1 = getNum();

} else {

d2 = getNum();

}

} else if (b == buttonZF) {// 按下±

BigDecimal d = getNum();

d = new BigDecimal("0").subtract(d);

setFormatNum(d);

if (first) {

d2 = d1 = getNum();

} else {

d2 = getNum();

}

} else if (b == buttonDel) {// 按下del

if (jTextField.getText().length() == 1

|| jTextField.getText().length() == 2

&& jTextField.getText().startsWith("-")) {

jTextField.setText("0");

} else {

String s = jTextField.getText();

s = s.substring(0, s.length() - 1);

if (s.endsWith("E+") || s.endsWith("E-"))

s = s.substring(0, s.length() - 2);

jTextField.setText(s);

if (first) {

d2 = d1 = getNum();

} else {

d2 = getNum();

}

}

} else if (b == buttonC) {// 按下c

init();

} else if (b == buttonJia) {// 按下+

BigDecimal s;

if (!first && allKey.indexOf(key) >= 0) {

if (oper == '-' || oper == '/') {

s = operate(d1, oper, d2);

} else {

s = operate(d2, oper, d1);

}

setFormatNum(s);

}// 如果不是第一次,且上一次操作是对数字进行操作

else {

first = false;

}

d2 = d1 = getNum();

// System.out.print("111我执行啦\n");

oper = '+';

} else if (b == buttonJian) {// 按下-

BigDecimal s;

if (!first && allKey.indexOf(key) >= 0) {

s = operate(d1, oper, d2);

setFormatNum(s);

}// 如果不是第一次,且上一次操作是对数字进行操作

else {

first = false;

}

d2 = d1 = getNum();

oper = '-';

} else if (b == buttonCheng) {// 按下*

BigDecimal s;

if (!first && allKey.indexOf(key) >= 0) {

if (oper == '-' || oper == '/') {

s = operate(d1, oper, d2);

} else {

s = operate(d2, oper, d1);

}

setFormatNum(s);

}// 如果不是第一次,且上一次操作是对数字进行操作

else {

first = false;

}

d2 = d1 = getNum();

oper = '*';

} else if (b == buttonChu) {// 按下/

BigDecimal s;

if (!first && allKey.indexOf(key) >= 0) {

s = operate(d1, oper, d2);

setFormatNum(s);

}// 如果不是第一次,且上一次操作是对数字进行操作

else {

first = false;

}

d2 = d1 = getNum();

oper = '/';

} else if (b == buttonGH) {// 按下平方根

if (jTextField.getText().startsWith("-")) {

init();

return;

}

BigDecimal d = getNum();

MathContext mc = new MathContext(10, RoundingMode.HALF_DOWN);

d = new BigDecimal(Math.sqrt(d.doubleValue()), mc);

setFormatNum(d);

if (first) {

d2 = d1 = getNum();

} else {

d2 = getNum();

}

} else if (b == buttonDeng) {// 按下=

BigDecimal s = null;

d2 = getNum();

if (!key.equals("=")) {

s = operate(d1, oper, d2);

} else {

s = operate(d2, oper, d1);

}

if (oper != '=' && !key.equals("=")) {// 上一次操作为 +-*/

d1 = getNum();

}

setFormatNum(s);

first = true;

} else { // 按下其他按钮

if (this.jTextField.getText().equals("0")

|| allKey.indexOf(key) == -1) {

this.jTextField.setText(b.getText());

} else {

this.jTextField.setText(jTextField.getText() + b.getText());

}

if (first) {

d2 = d1 = getNum();

} else {

d2 = getNum();

}// d2作被加数:d2+d1

}

key = b.getText();

}

/**

* 获取操作数

*

* @return 操作数

*/

public BigDecimal getNum() {

BigDecimal d = new BigDecimal(jTextField.getText());

return d;

}

public void setFormatNum(BigDecimal dd) {

MathContext mc = new MathContext(18, RoundingMode.HALF_DOWN);

BigDecimal d = new BigDecimal(dd.toString(), mc);

String num = d.toString();

if (num.endsWith(".0"))

num = num.replaceAll("\\.0", "");

this.jTextField.setText(num);

}

/**

* 计算

*

* @param a1

* 操作数1

* @param c

* 操作符

* @param a2

* 操作数2

* @return

*/

public BigDecimal operate(BigDecimal a1, char c, BigDecimal a2) {

MathContext mc = new MathContext(10, RoundingMode.HALF_DOWN);

switch (c) {

case '+':

return a1.add(a2);

case '-':

return a1.subtract(a2);

case '*':

return a1.multiply(a2);

case '/':

if (a2.compareTo(new BigDecimal("0")) == 0) {

init();

return new BigDecimal("0");

}

return a1.divide(a2, mc);

default:

return a2;

}

}

}

}

[代码运行效果截图]

java 比例计算器_java版计算器相关推荐

  1. java中的计算器_Java版计算器

    java版的计算器 功能特点: 1.不接收键盘输入. 2.支持+.-.*./.乘方和开方运算. 3.支持清除和退格. 4.可以显示运算表达式. 5.可以输入.5.-.5格式的小数,并在表达式中格式化为 ...

  2. java程序设计计算器_Java程序设计计算器(含代码)

    Java程序课程设计任务书 实用性计算器的设计与开发 1.主要内容: 开发一个实用型的计算器程序,实现基本的计算功能同时并进行相应的功能拓展,使其具更加人性化的功能.我们可以用其进行相应的计算功能来方 ...

  3. java代码 计算器_java代码---------计算器实现

    总结:虽然,没有人会帮你到底,凭什么要对你怜香惜玉 注意实现哪一个运算就把相关代码放在else if这个判断语句里面 package com.rue; import java.awt.BorderLa ...

  4. 实验楼Java写计算器_Java版图形界面计算器

    Java 版图形界面计算器 实验说明及介绍 环境登录 无需密码自动登录,系统用户名 shiyanlou,密码 shiyanlou 环境介绍 本实验环境采用带桌面的 Ubuntu Linux 环境,实验 ...

  5. java 线性计算器_java版科学计算器,支持表达式计算

    <java版科学计算器,支持表达式计算>由会员分享,可在线阅读,更多相关<java版科学计算器,支持表达式计算(12页珍藏版)>请在人人文库网上搜索. 1.程序设计综合设计题目 ...

  6. java简单计算_java简单计算器

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 无聊做个java加减乘除计算器,int型,没有小数,,呵呵,,真特么无聊,, package swing; import javax.swing.*; i ...

  7. java实现计算器_java高级计算器的实现

    不仅可以实现+,-,*,/,( ,) ,log ,ln,√ , ^ , cos ,sin,tan ,还支持最大500长度的字符运算.本程序是我上课的时候老师讲的,可能不是老师的原创,希望对有些同学有用 ...

  8. java双精度简易计算器_java小计算器

    [java]代码库import java.awt.*; import java.awt.event.*; import javax.swing.JButton; import javax.swing. ...

  9. java算软件工程_Java简单计算器的实现

    Java简易计算器的实现,供大家参考,具体内容如下 操作流程 用户通过输入要被运算的数字和运算符,进行数字的运算,例如用户输入2+2则会输出4. 加法运算截图 减法运算截图 乘法运算截图 除法运算截图 ...

最新文章

  1. SpringBoot b2b2c 多用户商城系统(十五)Springboot整合RabbitMQ...
  2. 如何datagrid分页保持每页先前选择的checkbox的状态?
  3. Dev c++工具将C代码生成dll文件以及如何调用dll文件
  4. 数学建模太难,如何以Tableau可视化的方式打开?
  5. 酷派删除android系统软件,【玩机教程】酷派手机root后不可删除系统自带程序+组件中英对照...
  6. 20155229 2016-2007-2 《Java程序设计》第一周学习总结
  7. 【跃迁之路】【590天】程序员高效学习方法论探索系列(实验阶段347-2018.09.18)...
  8. NLP学习—24.Pre-trained Word Embedding—ELMO、GPT、Bert
  9. 中移杭研 | 面向互联网应用的实时业务风控系统
  10. 大航海时代4+伙伴加入条件和港口一览
  11. K33 不是平面图_Edraw Max:一款简单好用的建筑平面图设计软件!
  12. 2018服务器cpu性能天梯图,哪里看CPU性能排行榜?2018年CPU天梯图最新版(高清)...
  13. linux 网卡 mac 配置文件,Linux脚本程序自动修改网卡配置文件中的MAC地址
  14. 一分钟详解智能快递柜电子锁结构
  15. Mysql文件夹删除不了
  16. 用计算机怎么管理小米路由器,小米路由器3G怎么设置?(电脑)
  17. 自旋电子器件 —— 概念
  18. 网页应该如何录屏呢?
  19. 批处理应用:IE问题修复
  20. nasm用XMM寄存器计算double类型累加

热门文章

  1. qrcode不显示二维码
  2. 一个空格引发的悲剧(详解如何看懂悲催的技术人员冷笑话)
  3. Redis list常用命令
  4. 8个基本的Docker容器管理命令
  5. 安科瑞AMB300系列母线槽红外测温解决方案
  6. 数据结构之平衡树(Treap)
  7. 用canvas画环形图
  8. php实现多重继承,关于实现多重继承的10篇文章推荐
  9. ISAR雷达成像技术问题
  10. 使用Lambda Power Tuner UI节省资金并提高性能