项目一:Java 计算器实现
项目一: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 计算器实现相关推荐
- Android 实战项目:简单计算器
文章目录 实战项目:简易计算器 1.需求分析 2.界面设计 3.关键代码 1.输入按键的合法性校验 2.执行运算并显示计算结果 简单计算器 - 详细操作步骤 总结 实战项目:简易计算器 1.需求分析 ...
- Java计算器设计实现
文章目录 需求分析 设计思路 设计实现 设计实现展示 其他功能 需求分析 目的是实现一个基于Java的可以求解带括号加减乘除表达式的带界面的计算器. 需要知道的Java技术:Java Swing(Ja ...
- Java计算器按钮间隔_获得声音按钮的最佳方法按Java计算器?
我是一名学习Java的学生,正在为我的简历工作一个独立的项目.我决定做一个Java计算器,因为我知道构成它的大多数组件.我不知道怎么做的一件事是按下按钮添加声音.对于Audiostream输入内容,我 ...
- java科学计算器报告心得,Java计算器课程设计报告---模拟科学计算器
Java计算器课程设计报告---模拟科学计算器 高级编程技术课程设计高级编程技术课程设计 模拟科学计算器模拟科学计算器 一一.概述概述 1.程序程序具备的功能具备的功能 (1)使用图形用户界面一个文本 ...
- Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决)
Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决) 参考文章: (1)Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决) (2)https://www.cn ...
- ubuntu下eclipse新建项目没有java project的解决办法
装好了eclipse之后却发现新建项目没有java project的选项,大致搜索了一下,并没有发现很好的解决方案(大都是让你重新安装什么的),于是开始瞎鼓捣,并且找到了一个方案: 在终端切换到roo ...
- mybatis项目报java.sql.SQLException: Numeric Overflow的异常
转载自:http://www.easytd.com/yichangjijin/d_1411081846.html 项目报java.sql.SQLException: Numeric Overflow的 ...
- java开发环境及数据类型实验_实验项目1 Java开发环境与语言基础
<实验项目1 Java开发环境与语言基础>由会员分享,可在线阅读,更多相关<实验项目1 Java开发环境与语言基础(14页珍藏版)>请在人人文库网上搜索. 1.实验项目1 Ja ...
- 琥珀ai_琥珀项目:Java的未来暴露
琥珀ai 如果一切按计划进行(我们正在研究Jigsaw项目),那么Java 9将在不到100天的时间内启动. 您可以在此处加入倒计时以发布它. 它将包含一长串新功能和升级功能,其中一些我们迫不及待想要 ...
最新文章
- Android 属性动画(Property Animation) ValueAnimator 的介绍
- 数据结构与算法:09 栈与递归
- springboot redis
- GRIDVIEW控件删除数据前如何给予客户端提示
- 1976年,提出公钥密码体制概念的学者
- Effective Java之多个构造参数考虑用构建器(二)
- 詹金斯的Maven报告
- keras手写数字识别--入门
- 忘记win7登陆密码的问题解决2种可能以及其问题的延伸
- grafana入门学习
- 使用vs2005经验与教训(关于masterpage,menu,gridview及对exce的l操作)
- weblogic 下载地址
- android listview表格分页显示,android实现listview分页的方法
- 易安卓手机APP教程
- 揭秘java虚拟机 kindle_Kindle有一个java虚拟机
- M1 芯片打开软件提示:“XXXX” 因为出现问题而无法打开 怎么解决?
- 微软服务器登录慢怎么解决,登录微软账户特别慢的原因
- java设计模式之策略模式+工厂模式(优化if-else)
- python-如何解决执行pip install 命令的时候出现 File stdin,line 1 pip install XXX的问题
- GO语言 Iris框架下载安装测试指南 排除故障 非GoMod模式
热门文章
- java @Override is not allowed when implementing interface method
- 手把手教你安装 Linux Mint系统
- 【esp8266】:python也能控制单片机?esp8266 micropython开发环境搭建及点亮led
- Gor-查询接口压力测试
- MFS2603AMDA0AD MFS2613AMBA0AD低功耗ASIL B安全系统基础芯片
- 《荷塘月色》(三鹿版)
- 2242 The Circumference of the Circle
- WindowBlinds 6 下载 破解 (新)
- 联科教育SQL Server 2008 R2管理系列04:创建表
- 从股票市场选择配对的股票:理论联系实际