项目一:Java 计算器实现

实现步骤:

1.利用Java swing 制作计算器界面

·界面大小(长度,宽度,位置-----可随意设置)

·输入框,按钮布局(大小,位置-----可随意设置)

·添加符号(粗细,颜色-----可随意设置)

2.利用双栈算符优先级法(或者用二叉树来求解后缀表达式的值)

·监听事件

·处理符号

·实现功能

·清空完成

1.利用Java swing 制作计算器界面

//步骤一最终应该得到的结果

·界面大小(长度,宽度,位置-----可随意设置)

import javax.swing.*;
import java.awt.*;public class Calculator extends JFrame {public Calculator() throws HeadlessException {this.init();this.addNorthComponent();this.addCenterCompponent();}public void init() {this.setTitle("计算器");                               //设置界面名称“计算器”this.setSize(340, 400);                 //设置计算器界面大小this.setLayout(new BorderLayout());this.setResizable(false);                            //让计算器界面无法被拉伸this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String[] args) {Calculator carculator = new Calculator();carculator.setVisible(true);}
}

·输入框,按钮布局(大小,位置-----可随意设置)

//上方图形按钮设置private JPanel jp_north = new JPanel();// JPanel 是 Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包中,可以进行嵌套,功能是对窗体中具有相同逻辑功能的组件进行组合。private JTextField input_text = new JTextField();        //创建一个输入框private JButton c_Btn = new JButton("AC");          //创建清空的“AC”的按钮。//中间图形按钮设置private JPanel jp_center = new JPanel();//设置计算器上面输入框和清空键public void addNorthComponent() {this.input_text.setPreferredSize(new Dimension(230, 40));//设置大小jp_north.add(input_text);                           //加入输入框this.c_Btn.setForeground(Color.RED);                //设制“AC”为红色jp_north.add(c_Btn);                                //加入清空键this.add(jp_north, BorderLayout.NORTH);}public void addCenterCompponent() {String btn_next = "C()/789*456-123+%0.=";             //设置按钮的符号this.jp_center.setLayout(new GridLayout(5, 4));//设置中间按钮的行列for (int i = 0; i < 20; i++) {String temp = btn_next.substring(i, i + 1);           //将每个字符分别放在不同的按钮JButton btn = new JButton();btn.setText(temp);
jp_center.add(btn);}this.add(jp_center, BorderLayout.CENTER);}

·添加符号(粗细,颜色-----可随意设置)

两种方法:一种利用if和逻辑表达式||,一种利用matches

String regex = "[\\+\\-\\*\\/\\%\\(\\)\\.\\=C]";
for (int i = 0; i < 20; i++) {String temp = btn_next.substring(i, i + 1);           //将每个字符分别放在不同的按钮JButton btn = new JButton();btn.setText(temp);if(temp.matches(regex)){btn.setFont(new Font("粗体", Font.BOLD, 20));//运算符加粗变大btn.setForeground(Color.RED);                          //运算符变成红色}
//            if(temp.equals("+") ||
//                    temp.equals("-") ||
//                    temp.equals("*") ||
//                    temp.equals("/") ||
//                    temp.equals("C") ||
//                    temp.equals("(") ||
//                    temp.equals(")") ||
//                    temp.equals("=") ||
//                    temp.equals("%") ||
//                    temp.equals(".")){
//                btn.setFont(new Font("粗体", Font.BOLD, 20));//运算符加粗变大
//                btn.setForeground(Color.RED);                          //运算符变成红色
//            }jp_center.add(btn);}

2.利用双栈算符优先级法(或者用二叉树来求解后缀表达式的值)

·监听事件

ActionListener用于接收操作事件的侦听器接口

JOptionPane.showMessageDialog(null,"这个值表示弹出对话框左上角的信息,比如"消息"等",
"这个参数表示你要显示出的信息,比如"你输错密码"等      (如下图所示)

public class Calculator extends JFrame implements ActionListener {//                btn.setForeground(Color.RED);                          //运算符变成红色
//            }btn.addActionListener(this);jp_center.add(btn);}@Overridepublic void actionPerformed(ActionEvent e) {String clickStr = e.getActionCommand();if(".0123456789".indexOf(clickStr) != -1){this.input_text.setText(input_text.getText() + clickStr);
//让数字和小数点可以输进输入框并且不覆盖还可以顺序表示this.input_text.setHorizontalAlignment(JTextField.RIGHT);
//让数字出现在输入框的右侧//JOptionPane.showMessageDialog(this, clickStr);
//让运算符可以不弹出显示框}}

·处理符号

这里就大有深究了,前言所述,有两种方法。容我给大家来个小普及:

中缀表达式     A+(B-C/D)*E

后缀表达式     ABCD/-E*+

例子:Exp= a*b +(c-d/e)*f                PostExp=ab*cde/-f*+

我的算法思想无论是双栈还是二叉树都是和后缀表达式挂钩的,当然你也可以从中得到前缀或者其他算法的思路   (我所能知道的最合适新手的算法思想如下)

从左向右依次读取算术表达式的元素X,分以下情况进行不同的处理:

(1)如果X是操作数,直接入队

(2)如果X是运算符,再分以下情况:

a)如果栈为空,直接入栈。  b)如果X==”(“,直接入栈。  c)如果X==”)“,则将栈里的元素逐个出栈,并入队到后缀表达式队列中,直到第一个配对的”(”出栈。(注:“(”和“)”都不 入队)       d)如果是其他操作符(+ - * /),则和栈顶元素进行比较优先级。 如果栈顶元素的优先级大于等于X,则出栈并把栈中弹出的元素入队,直到栈顶元素的优先级小于X或者栈为空。弹出完这些元素后,才将遇到的操作符压入到栈中。

(3)最后将栈中剩余的操作符全部入队。

求值的处理过程是自左至右扫描表达式的每一个字符:

1、当扫描到的是运算数,则将其压入栈OPND,

2、当扫描到的是运算符时:             如这个运算符比OP栈顶运算符的优先级高,则入栈;             如这个运算符比OP栈顶运算符优先级低,则从OPND栈中弹出两个运算符,从栈OP中弹出栈顶运算符进行运算,并将运算结果压入栈OPND。

3、继续处理当前字符,直到遇到结束符为止。

·实现功能

·清空

项目一:Java 计算器实现相关推荐

  1. Android 实战项目:简单计算器

    文章目录 实战项目:简易计算器 1.需求分析 2.界面设计 3.关键代码 1.输入按键的合法性校验 2.执行运算并显示计算结果 简单计算器 - 详细操作步骤 总结 实战项目:简易计算器 1.需求分析 ...

  2. Java计算器设计实现

    文章目录 需求分析 设计思路 设计实现 设计实现展示 其他功能 需求分析 目的是实现一个基于Java的可以求解带括号加减乘除表达式的带界面的计算器. 需要知道的Java技术:Java Swing(Ja ...

  3. Java计算器按钮间隔_获得声音按钮的最佳方法按Java计算器?

    我是一名学习Java的学生,正在为我的简历工作一个独立的项目.我决定做一个Java计算器,因为我知道构成它的大多数组件.我不知道怎么做的一件事是按下按钮添加声音.对于Audiostream输入内容,我 ...

  4. java科学计算器报告心得,Java计算器课程设计报告---模拟科学计算器

    Java计算器课程设计报告---模拟科学计算器 高级编程技术课程设计高级编程技术课程设计 模拟科学计算器模拟科学计算器 一一.概述概述 1.程序程序具备的功能具备的功能 (1)使用图形用户界面一个文本 ...

  5. Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决)

    Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决) 参考文章: (1)Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决) (2)https://www.cn ...

  6. ubuntu下eclipse新建项目没有java project的解决办法

    装好了eclipse之后却发现新建项目没有java project的选项,大致搜索了一下,并没有发现很好的解决方案(大都是让你重新安装什么的),于是开始瞎鼓捣,并且找到了一个方案: 在终端切换到roo ...

  7. mybatis项目报java.sql.SQLException: Numeric Overflow的异常

    转载自:http://www.easytd.com/yichangjijin/d_1411081846.html 项目报java.sql.SQLException: Numeric Overflow的 ...

  8. java开发环境及数据类型实验_实验项目1 Java开发环境与语言基础

    <实验项目1 Java开发环境与语言基础>由会员分享,可在线阅读,更多相关<实验项目1 Java开发环境与语言基础(14页珍藏版)>请在人人文库网上搜索. 1.实验项目1 Ja ...

  9. 琥珀ai_琥珀项目:Java的未来暴露

    琥珀ai 如果一切按计划进行(我们正在研究Jigsaw项目),那么Java 9将在不到100天的时间内启动. 您可以在此处加入倒计时以发布它. 它将包含一长串新功能和升级功能,其中一些我们迫不及待想要 ...

最新文章

  1. Android 属性动画(Property Animation) ValueAnimator 的介绍
  2. 数据结构与算法:09 栈与递归
  3. springboot redis
  4. GRIDVIEW控件删除数据前如何给予客户端提示
  5. 1976年,提出公钥密码体制概念的学者
  6. Effective Java之多个构造参数考虑用构建器(二)
  7. 詹金斯的Maven报告
  8. keras手写数字识别--入门
  9. 忘记win7登陆密码的问题解决2种可能以及其问题的延伸
  10. grafana入门学习
  11. 使用vs2005经验与教训(关于masterpage,menu,gridview及对exce的l操作)
  12. weblogic 下载地址
  13. android listview表格分页显示,android实现listview分页的方法
  14. 易安卓手机APP教程
  15. 揭秘java虚拟机 kindle_Kindle有一个java虚拟机
  16. M1 芯片打开软件提示:“XXXX” 因为出现问题而无法打开 怎么解决?
  17. 微软服务器登录慢怎么解决,登录微软账户特别慢的原因
  18. java设计模式之策略模式+工厂模式(优化if-else)
  19. python-如何解决执行pip install 命令的时候出现 File stdin,line 1 pip install XXX的问题
  20. GO语言 Iris框架下载安装测试指南 排除故障 非GoMod模式

热门文章

  1. java @Override is not allowed when implementing interface method
  2. 手把手教你安装 Linux Mint系统
  3. 【esp8266】:python也能控制单片机?esp8266 micropython开发环境搭建及点亮led
  4. Gor-查询接口压力测试
  5. MFS2603AMDA0AD MFS2613AMBA0AD低功耗ASIL B安全系统基础芯片
  6. 《荷塘月色》(三鹿版)
  7. 2242 The Circumference of the Circle
  8. WindowBlinds 6 下载 破解 (新)
  9. 联科教育SQL Server 2008 R2管理系列04:创建表
  10. 从股票市场选择配对的股票:理论联系实际