Java-计算器(标准计算器和科学计算器)的实现
/ 需要说明这里的文本框中并不能呈现出算数表达式,有时间改进
可以先建两个类,一个是Biaozhun 用来实现标准计算器,另一个是Kexue 用来实现科学计算器

通过功能菜单实现科学计算器和标准计算器的转换

具体代码中,在Biaozhun类 和 Kexue类 各自定义相对应的事件来实现转换

menuItem_1.addActionListener(new ActionListener()
menuItem.addActionListener(new ActionListener()

对于每一个按钮也要设置相应的事件响应(详情见代码)

代码部分

首先是标准计算器的实现

package dazuoye;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class Biaozhun extends JFrame implements ActionListener {private final String[] KEYS = { "*", "/", "7", "8", "9","+", "4", "5", "6", "-", "1", "2", "3", "|x|","0",".","=", "1/x" };private final String[] COMMAND = { "Back", "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;StringBuffer sb = new StringBuffer();String vl = null;public Biaozhun() {setTitle("标准型");this.setBackground(Color.LIGHT_GRAY);this.setTitle("标准计算器");this.setLocation(500, 300);this.setSize(500, 500);this.setResizable(false);JMenuBar menuBar = new JMenuBar();setJMenuBar(menuBar);JMenu menu = new JMenu("功能");menuBar.add(menu);JMenuItem menuItem = new JMenuItem("标准型");menu.add(menuItem);JMenuItem menuItem_1 = new JMenuItem("科学型");menu.add(menuItem_1);menuItem_1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {Kexue science = new Kexue();science.setVisible(true);}});resultText.setHorizontalAlignment(JTextField.RIGHT);resultText.setBackground(Color.white);resultText.setFont(new Font("TimesRoman",Font.BOLD,46));JPanel PPanel = new JPanel();PPanel.setLayout(new GridLayout(5, 4, 3, 3));for (int i = 0; i < COMMAND.length; i++) {commands[i] = new JButton(COMMAND[i]);PPanel.add(commands[i]);commands[i].setFont(new Font("Courir",Font.PLAIN,20));}for (int i = 0; i < KEYS.length; i++) {keys[i] = new JButton(KEYS[i]);PPanel.add(keys[i]);keys[i].setFont(new Font("Courir",Font.ITALIC,20));}JPanel panel1 = new JPanel();panel1.setLayout(new BorderLayout(3,3));panel1.add("Center", PPanel);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])) {handleBack();} else if (label.equals(COMMAND[1])) {handleC();} else if ("0123456789.".indexOf(label) >= 0) {handleNumber(label);} elsehandleOperator(label);}private void handleBack() {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 = "=";}elseresultText.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("零没有倒数");}elseresultNum = 1 / resultNum;}else if (operator.equals("+")) {resultNum += getNumberFromText();}else if (operator.equals("-")) {resultNum -= getNumberFromText();}else if (operator.equals("*")) {resultNum *= getNumberFromText();}else if (operator.equals("|x|")) {resultNum = Math.abs(resultNum);}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[]) {Biaozhun application = new Biaozhun();application.setVisible(true);application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
}

接着是科学计算器的实现

package dazuoye;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class Kexue extends JFrame implements ActionListener {private final String[] KEYS = { "*", "/", "7", "8", "9","+", "4", "5", "6", "-", "1", "2", "3", "|x|","0",".","=", "1/x" };private final String[] COMMAND = { "Back", "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;private final String[] KEYS2= {"X^2","X^3","X^Y","Sqrt","rt","X!","ln","lg","%","sin","cos","tan","PI","e","e^X"};private JButton keys2[]=new JButton[KEYS2.length];StringBuffer sb = new StringBuffer();String vl = null;private JPanel contentPane,contentpane2;private FlowLayout layout;public Kexue(){super("科学型");this.setBackground(Color.LIGHT_GRAY);this.setTitle("科学计算器");this.setSize(800, 500);JMenuBar menuBar = new JMenuBar();setJMenuBar(menuBar);JMenu menu = new JMenu("功能");menuBar.add(menu);JMenuItem menuItem = new JMenuItem("标准型");menu.add(menuItem);JMenuItem menuItem_1 = new JMenuItem("科学型");menu.add(menuItem_1);menuItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {Biaozhun ordinary = new Biaozhun();ordinary.setVisible(true);}});resultText.setHorizontalAlignment(JTextField.RIGHT);resultText.setBackground(Color.white);resultText.setFont(new Font("TimesRoman",Font.BOLD,46));JPanel PPanel=new JPanel();PPanel.setLayout(new GridLayout(5, 4, 3, 3));for (int i = 0; i < COMMAND.length; i++) {commands[i] = new JButton(COMMAND[i]);PPanel.add(commands[i]);commands[i].setFont(new Font("Courir",Font.PLAIN,20));}for (int i = 0; i < KEYS.length; i++) {keys[i] = new JButton(KEYS[i]);PPanel.add(keys[i]);keys[i].setFont(new Font("Courir",Font.ITALIC,20));}JPanel panel1 = new JPanel();panel1.setLayout(new BorderLayout(3,3));panel1.add("Center", PPanel);JPanel top = new JPanel();top.setLayout(new BorderLayout());top.add("Center", resultText);contentPane=new JPanel();contentPane.setLayout(new BorderLayout(3, 5));contentPane.add("North", top);contentPane.add("Center", panel1);//secondJPanel ppanel=new JPanel();ppanel.setLayout(new GridLayout(5, 3, 3, 3));for (int i = 0; i < KEYS2.length; i++) {keys2[i] = new JButton(KEYS2[i]);ppanel.add(keys2[i]);keys2[i].setFont(new Font("Courir",Font.ITALIC,20));}contentpane2 = new JPanel();contentpane2.setLayout(new BorderLayout(3, 5));contentpane2.add("Center", ppanel);layout=new FlowLayout();JPanel ane= new JPanel();ane.setLayout(layout);getContentPane().setLayout(new BorderLayout(3,5));getContentPane().add("Center", contentPane);getContentPane().add("East", contentpane2);
//eventfor (int i = 0; i < KEYS.length; i++) {keys[i].addActionListener(this);}for (int i = 0; i < COMMAND.length; i++) {commands[i].addActionListener(this);}for (int i = 0; i < KEYS2.length; i++)keys2[i].addActionListener(this);setVisible(true);}
//make itpublic void actionPerformed(ActionEvent e){String label = e.getActionCommand();if (label.equals(COMMAND[0])) {handleBack();} else if (label.equals(COMMAND[1])) {handleC();} else if ("0123456789.".indexOf(label) >= 0) {handleNumber(label);}else if(label.equals("PI"))resultText.setText(String.valueOf(3.14159265));else if(label.equals("e"))resultText.setText(String.valueOf(2.17828));elsehandleOperator(label);}//private void handleBack() {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 = "=";}elseresultText.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("零没有倒数");}elseresultNum = 1 / resultNum;}else if (operator.equals("+")) {resultNum += getNumberFromText();}else if (operator.equals("-")) {resultNum -= getNumberFromText();}else if (operator.equals("*")) {resultNum *= getNumberFromText();}else if (operator.equals("|x|")) {resultNum = Math.abs(resultNum);}else if (operator.equals("X^2")) {resultNum = resultNum*resultNum;}else if (operator.equals("X^3")) {resultNum = resultNum*resultNum*resultNum;}else if (operator.equals("X^Y")) {resultNum = Math.pow(resultNum,getNumberFromText());}else if (operator.equals("Sqrt")) {resultNum = Math.sqrt(resultNum);}else if (operator.equals("rt")) {resultNum = resultNum*57.3;}else if (operator.equals("X!")) {int ee;double re=resultNum ;int c=1;for(ee=1;ee<=re;ee++){c=c*ee;resultNum=c;}}else if (operator.equals("ln")) {resultNum = Math.log(resultNum);}else if (operator.equals("lg")) {resultNum = Math.log10(resultNum);}else if (operator.equals("%")) {resultNum %= getNumberFromText();}else if (operator.equals("sin")) {resultNum = Math.sin(resultNum);}else if (operator.equals("cos")) {resultNum = Math.cos(resultNum);}else if (operator.equals("tan")) {resultNum = Math.tan(resultNum);}else if (operator.equals("e^X")) {resultNum = Math.exp(resultNum);}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[]) {EventQueue.invokeLater(new Runnable() {public void run() {try {Kexue application = new Kexue();application.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}}

运行结果



**

结束

**

Java---计算器(标准计算器,科学计算器)的实现相关推荐

  1. 可编程计算机边长计算器,可编程科学计算器(Scientific Calculator Plus)

    Scientific Calculator Plus这款手机可编程计算器ui做的不怎么好看,不过胜在功能强大,它是一个和Matlab相似的强大的数学分析工具.除了其他大部分计算器所拥有的基本功能. 功 ...

  2. 在计算机中有科学计算器和什么,科学计算器存_Math在科学计算器上代表什么怎样才能在计算器上显示_淘题吧...

    ⑴ 急 急!请问一下考试不允许带具有存储功能的计算器.科学计算器算吗 如果楼抄主即将携带的是图中所示计算器,是可以的. 带有存储功能的计算器一般指的是能够存储资料数据的计算器,主要防止考生夹带私货,和 ...

  3. 科学计算机怎么清除数据,互联网要点:怎么将手机中的计算器设置为科学计算器并对缓存数据进行清除...

    当下应该属于互联网时代吧今天小编分享一篇有关于怎么将手机中的计算器设置为科学计算器并对缓存数据进行清除,相信小伙伴们对这个话题应该也很关注吧,那么现在就为小伙伴们说说怎么将手机中的计算器设置为科学计算 ...

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

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

  5. java实现多功能科学计算器(包括进制转换,三角函数,四则运算等)

    多功能科学计算器(包括进制转换,三角函数,四则运算等) Basic Framework calculator.java package myCalculator; import java.awt.*; ...

  6. 计算机课设:基于Java实现的简单科学计算器

    设计目的 对Java课程知识的总结,进一步提高对Java语言的理解与掌握 深入的理解Java语言,并将其中抽象概念运用到实际编程中,锻炼学生的课题分析和解决问题的能力,培养正确的编程习惯 培养自主学习 ...

  7. 定积分计算器_使用科学计算器计算概率分布

    [作者声明] 本文所有文字均为作者原创,所有图片均为作者本人亲自拍摄或制作. 版权所有,仅供阅读欣赏,禁止任何单位或个人以任何形式对本文的文字或图片进行包括但不限于复制.转载.引用.抄袭.截图.模仿. ...

  8. Android计算器——横屏切换科学计算器

    简单计算器设计,实现以下功能: 竖屏时能实现基本的加减乘除运算.回退和清空输入. 横屏时变为科学计算器,实现函数计算.进制换算等功能.输入计算公式,按等号键输出计算结果. 公式输入和结果显示区支持长按 ...

  9. 小数阶乘怎么用c语言计算器,自编科学计算器 支持多次方 多次开放 阶乘 部分数学函数...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 /**************************************************************************** ...

  10. 基于WPF的科学计算器程序

    基于WPF的科学计算器程序 1.前言 2.界面展示 2.1标准计算器界面 2.2科学计算器界面 3.功能分析 4.代码实现 4.1窗体拖动 4.2界面切换 4.3运算符优先级 4.4功能函数 5.结语 ...

最新文章

  1. asp.net学习之DataList控件
  2. Git ----fatal: unable to access ‘https://gitee.com/***.git/‘: SSL certificate problem: unable
  3. iOS UI 开发按钮的使用
  4. .NET5来了你别慌
  5. [选拔赛2 NOIP2018雅礼集训 Day3 u,v,w]玩个三角形(二维差分),玩个球(状压DP+map),玩个树(树上DP)
  6. hibernateTemplate 的find 查找方法
  7. mysql自带的全文索引_MySQL创建全文索引分享
  8. 【剑指Offer】18树的子结构
  9. mysql 参照完整性规则_MySQL存储引擎你们知道多少?
  10. 热烈祝贺龙芯Loongarch OpenJDK8开源,已编译完成
  11. 百度,google等搜索引擎的网络蜘蛛基本原理
  12. 抖音怎么投放广告,抖音广告投放效果
  13. Photoshop抠图--使用图层蒙版抠图
  14. 英语语法特殊句型刷题总结
  15. 阿里云服务器ECS不能通过浏览器(外网)访问的解决办法
  16. 求定积分的不太常见的方法
  17. 【课程学习】(中国大学MOOC)武汉理工大学高级人工智能原理与技术课后习题笔记(1-5章)
  18. 受到人工智能发展的影响的,主要包括哪些行业?
  19. 旗舰杀手红米K20实拍图曝光:流光外壳美炸
  20. 平面设计:制作创意头像

热门文章

  1. 计算机组成与结构1800题,最新版数据结构1800题含完整答案详解
  2. UNIX网络编程之一:代码环境搭建
  3. MAC下学习UNIX网络编程
  4. thinkpadt410接口介绍_ThinkPadT410全程拆解
  5. 百度贴吧里如何留网址
  6. 奇妙的数字 小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗?
  7. cisco2811 路由器修改密码
  8. Xcode12 兼容iOS14 及下载链接
  9. 方舟服务器伤害怎么显示,方舟单机模式下怎么显示伤害数值啊 | 手游网游页游攻略大全...
  10. 知网下载文献格式caj/pdf