Java代码实现计算器加减乘除简易功能
package test;
import javax.swing.;
import java.awt.;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.Stack;
/**
Created by zxx on 2020/10/15.
*/
public class Calculator extends JFrame{private Stack operandStack= new Stack<>();
private Stack operatorStack = new Stack<>();private Calculator(){
setTitle("计算器");
setSize(266,340);
//setSize(400,540);
Container c=getContentPane();
c.setLayout(null); JTextArea jt=new JTextArea(100,100);
jt.setFont(new Font("Aria",Font.BOLD,32));
jt.setLineWrap(true);
JScrollPane sp=new JScrollPane(jt);
jt.setCaretPosition(jt.getDocument().getLength());
sp.setBounds(0,0,250,100);
c.add(sp); JPanel p=new JPanel();
p.setLayout(new GridLayout(5,4,0,0)); p.setBounds(0,100,250,200);
String[] num={"(",")","AC","/","7","8","9","*","4","5","6","-","1","2","3","+","0",".","DEL","="};
JButton[] jb=new JButton[20];
for(int i=0;i<20;i ++ ){
jb[i]=new JButton(num[i]);
p.add(jb[i]);
}
c.add(p); for(int i=0;i<18;i ++){
if(i!=2){
final int j=i;
jb[i].addActionListener(e-> jt.append(num[j]));
}
} jb[2].addActionListener(e->{
jt.setText("");
operandStack.clear();
operatorStack.clear();
});
jb[18].addActionListener(e->{
try{
jt.setText(jt.getText().substring(0,jt.getText().length()-1));
}catch(Exception ignored) { }//忽略这个异常 IDEA就是好用!!!
});
jb[19].addActionListener(e->{
try{
double x= calculate(jt.getText()+ "#");
jt.setText("");
jt.append(String.valueOf(x));
}catch(Exception ex){
if(ex.getMessage()==null)
jt.setText("ERROR!");
else
jt.setText(ex.getMessage());
}
});
//禁止文本域的enter换行
KeyStroke enter = KeyStroke.getKeyStroke("ENTER");
jt.getInputMap().put(enter, "none"); this.getRootPane().setDefaultButton(jb[19]); c.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e)
{ }
public void keyPressed(KeyEvent e) //键盘按键监听
{
char label=e.getKeyChar();
String k=String.valueOf(label);
if(label==KeyEvent.VK_ENTER)
{
calculate();
}
else if(label==KeyEvent.VK_BACK_SPACE)
{
String s = jt.getText();
if(s!=null)
{
calculate(); //调用定义的处理←方法
}else
{
jt.setText(s);
}
}
else
{
calculate(k); //按下数字和运算符号的叠加
}
}
public void keyReleased(KeyEvent e)
{ } }); setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
private void calculate(){
String b = operatorStack.pop();
double c = operandStack.pop();
double d = operandStack.pop();
double e;
if (b.equals("+")) {
e = d + c;
operandStack.push(e);
}
if (b.equals("-")) {
e = d - c;
operandStack.push(e);
}
if (b.equals("*")) {
e = d * c;
operandStack.push(e);
}
if (b.equals("/")) {
if(c==0)
throw new ArithmeticException("DivideByZero!");//不可修改为Exception
// Exception的异常是必须处理的,是受控异常;而ArithmeticException 不是必须处理的 ,受控异常必须强制处理
e = d / c;
operandStack.push(e);
}
}private Double calculate(String text){
HashMap<String,Integer> precede=new HashMap<>();
precede.put("(",0);
precede.put(")",0);
precede.put("/",2);
precede.put("*",2);
precede.put("-",1);
precede.put("+",1);
precede.put("#",0);operatorStack.push("#"); int flag=0;
for(int i=0;i<text.length();i++ ){
String a=String.valueOf(text.charAt(i));
if(!a.matches("[0-9.]")){
if(flag!=i)
operandStack.push(Double.parseDouble(text.substring(flag,i)));
flag=i+ 1;
while(!(a.equals("#")&&operatorStack.peek().equals("#"))){
if(precede.get(a)>precede.get(operatorStack.peek())||a.equals("(")){
operatorStack.push(a);
break;
}else {
if(a.equals(")")) {
while(!operatorStack.peek().equals("("))
calculate();
operatorStack.pop();
break;
}
calculate();
}
} }
} return(operandStack.pop());
}
public static void main(String[] args){
new Calculator();
}
}
Java代码实现计算器加减乘除简易功能的更多相关文章
- java代码实现文件的下载功能
昨天,根据需求文档的要求,自己要做一个关于文件下载的功能,从学校毕业已经很久了,自己好长时间都没有做过这个了,于是自己上网百度,最终开发出来的代码如下: 哦!对了,我先说一下我的思路,首先需要获取服务 ...
- java代码---------实现布尔型的功能,是否执行下一步的关键
总结:灵活 package com.sads; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...
- 干货 | 云智慧透视宝Java代码性能监控实现原理
这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,做一手好菜的男神老公的大作,曾发表于技术公号,经本人授权转载~~ 一.Java ...
- [java代码库]-简易计算器(第二种)
[java代码库]-简易计算器(第二种) 第二种方案:在程序中不使用if/switch……case等语句,完成计算器功能. <html> <head> <title> ...
- Java计算器的简易实现(+-*/)
java计算器的简易实现(+-*/) import java.util.Scanner; /* 写一个计算器 实现加减乘除四个功能 并且能够用循环接收新的数据,通过用户交互实现 写四个方法 + - * ...
- 200行Java代码搞定计算器程序
发现了大学时候写的计算器小程序,还有个图形界面,能够图形化展示表达式语法树,哈哈;) 只有200行Java代码,不但能够计算加减乘除,还能够匹配小括号~ 代码点评: 从朴素的界面配色到简单易懂错误提示 ...
- KONGA下的HAMC插件功能 --JAVA代码实现
设置HAMC插件 postman模拟请发发送: Java代码: HMAC-SHA-256工具类 1 import java.security.InvalidKeyException; 2 impor ...
- java图形界面 计算器实现
编写程序实现一个简单计算器的基本功能,具体可以模仿Windows附件中的计算器或模拟常见的实物计算器. package beizi; import java.awt.EventQueue; impor ...
- 怎样编写高质量的java代码
代码质量概述 怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍.也请有过代码质量相关经验的朋友 ...
随机推荐
- python3 venv
介绍 venv 是什么? python3 自带的虚拟环境 为什么需要虚拟环境? 当服务器中需要搭建共存多个环境时(不同环境之间会有冲突) 比如说环境1:需要mongo:3.6版本 / 但是环境2:需要 ...
- leetcode刷题-61旋转链表
题目 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2输出: 4 ...
- 为什么选择H5游戏开发定制?
为什么选择H5游戏开发定制? 随着微信H5游戏推广带来的显著效果,越来越多的商家已经加入到游戏营销的队伍中来, 对H5小游戏有了解的商家都知道,[模板游戏]的价格往往低于[定制游戏]的价格,可是为什么 ...
- jni之jni与jna的比较
java开发过程中会遇到需要调用c/c++动态库(windows平台的dll和linux平台的so)的情况,可以使用JNI或者JNA技术. JNA基于JNI技术开发,主要在上层作了类型自动转换的封装, ...
- 算法数据结构 | 三个步骤完成强连通分量分解的Kosaraju算法
强连通分量分解的Kosaraju算法 今天是算法数据结构专题的第35篇文章,我们来聊聊图论当中的强连通分量分解的Tarjan算法. Kosaraju算法一看这个名字很奇怪就可以猜到它也是一个根据人名起 ...
- Spring使用@Async实现异步
使用场景 在实际项目中,一个接口如果需要处理很多数据,如果是同步执行,通过网络请求接口可能会出现请求超时.这时候就需要使用异步执行处理了. 使用经验 代码 异步服务类 @Service // Spri ...
- Docker多主机管理(八)
docker多主机管理 前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的.但在真正的环境中会有多个 host,容器在这些 host 中启动.运行.停止和 ...
- matlab中的多项式计算
在做多项式加法的时候需要做多项式扩展.这里将g1扩展到与f等长 多项式的乘积,是两个多项式之和减1, 多项式求导函数:ployder() 先建立两个多项式,再求a的导函数 在计算两个多项式乘积的导函数 ...
- 分布式文件系统之FastDFS安装部署
前面我们了解了分布式文件系统mogilefs的框架以及安装部署和简单使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/MogileFS/:今天我们来了解下 ...
- 解决vue侧边栏一级菜单问题
最近我在学习vue,然后遇到一个问题,就是跟着视频里面的代码敲,出现了一些不好解决的问题 这是两个一级目录,我遇到的问题就是点击第一个一级目录,另外一个一级目录也会展开, 前端代码是这样的,和视频里面 ...