java实现整数计算器
计算器代码
package stack;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
public class PolandNotation {
public static void main(String[] args) {
// TODO Auto-generated method stub
//中缀转后缀
Scanner in =new Scanner(System.in);
System.out.println("请输入一个计算式:");
String exepression=in.next();
List<String> ls=toInfixExpressionList(exepression);
System.out.println(ls);
List<String> parsesiffixexpression=parseSuffixExpressionList(ls);
System.out.println("后缀表达式对应的List:"+parsesiffixexpression);
System.out.printf("运算结果%d\n",calculate(parsesiffixexpression));
}
public static List<String> parseSuffixExpressionList(List<String> ls){
//符号栈
Stack<String> s1=new Stack<String>();
//储存中间结果
List<String> s2=new ArrayList<String>();
//遍历
for(String item:ls) {
//如果是一个数就加入s2
if(item.matches("\\d+")) {
s2.add(item);
}else if(item.equals("(")) {
s1.push(item);
}else if(item.equals(")")){
//依次弹出
while(!s1.peek().equals("(")) {
s2.add(s1.pop());
}
s1.pop();//消掉小括号,消除小括号
}else {
//优先级的问题
//当item的优先级小于等于栈顶的优先级
//缺少一个比较优先级高低的方法
while(s1.size()!=0&&Operation.getValue(s1.peek())>=Operation.getValue(item)) {
s2.add(s1.pop());
}
//还需要将item栈中
s1.push(item);
}
}
while(s1.size()!=0) {
s2.add(s1.pop());
}
return s2;
}
//将中缀表达式转化为对应的List
public static List<String> toInfixExpressionList(String s){
List<String> ls=new ArrayList<String>();
int i=0;
String str;
char c;
do {
//如果c一个非数字,就需要加入到ls中去
if((c=s.charAt(i))<48||(c=s.charAt(i))>57) {
ls.add(""+c);
i++;
}else {//如果是一个数字
str="";//先将字符串置空
while(i<s.length()&&(c=s.charAt(i))>=48&&(c=s.charAt(i))<=57) {
str+=c;//拼接
i++;
}
ls.add(str);
}
}while(i<s.length());
return ls;
}
public static int calculate(List<String> ls) {
Stack<String> stack=new Stack<String>();
for(String item :ls) {
if(item.matches("\\d+")) {//多位数直接入栈
stack.push(item);
}else {
//pop出两个数组
int num2=Integer.parseInt(stack.pop());
int num1=Integer.parseInt(stack.pop());
int res=0;
if(item.equals("+")) {
res=num1+num2;
stack.push(""+res);
}
else if(item.equals("-")) {
res=num1-num2;
stack.push(""+res);
}
else if(item.equals("*")) {
res=num1*num2;
stack.push(""+res);
}
else if(item.equals("/")) {
res=num1/num2;
stack.push(""+res);
}
}
}
return Integer.parseInt(stack.peek());
}
}
//编写一个了类返回一个运算符号的优先级
class Operation{
private static int ADD=1;
private static int SUB=1;
private static int MUL=2;
private static int DIV=2;
//写一个方法,返回对应优先级的数字
public static int getValue(String oper) {
int result=0;
switch (oper) {
case "+":
result=ADD;
break;
case "-":
result=SUB;
break;
case "*":
result=MUL;
break;
case "/":
result=DIV;
break;
default:
System.out.println("不存在该运算符号");
break;
}
return result;
}
}
java实现整数计算器的更多相关文章
- java 基础 整数类型
1.Java有四种整数类型:byte.short.int和long. 2.Java默认整数计算的结果是int类型. 3.整数的字面量是int类型. 4.若字面量超过int类型的最大值,则字面量是lon ...
- Java打印整数的二进制表示(代码与解析)
Java打印整数的二进制表示(代码与解析) int a=-99; for(int i=0;i<32;i++){ int t=(a & 0x80000000>>>i)&g ...
- Java之整数运算
Java的整数运算遵循四则运算规则,可以使用任意嵌套的小括号.四则运算规则和初等数学一致.例如: public class Main { public static void main(String[ ...
- Java 判断整数方法
今天写代码的时候突然想到要怎么来判断整数,然后通过判断是否是整数来处理相关的操作.开始想到了几个方法,比如百度到的 x(int) instanceof Integer,但是这样的话程序会报错,还有一个 ...
- Java SWT 做计算器。
java -- swt - - 计算器 环境搭建 安装java.eclipse.以及对应的swt插件. 开始工程 建立工程: 在java下建立一个在其他 —- WindowsBuilder — ...
- java中整数类型(short int long)的存储方式
在java中的整数类型有四种,分别是 byte short int long 其中byte只有一个字节 0或1,在此不详细讲解. 其他的三种类型如下: 1.基本类型:short 二进制位数:16包装 ...
- Java语言编写计算器(简单的计算器)
Java编写的一个简单计算器,本人还比较菜,只能这样了,有点代码冗余,不能连续计算. import javax.swing.*; import java.awt.*; import java.awt. ...
- java SWT/Rap 计算器版本2(键盘鼠标兼容)
package cn.lesaas.nof.rwtswt.ui.dialog; import java.math.BigDecimal; import org.eclipse.swt.SWT;impo ...
- 自己动手写Java大整数《3》除法和十进制转换
之前已经完毕了大整数的表示.绝对值的比較大小.取负值.加减法运算以及乘法运算. 详细见前两篇博客(自己动手写Java * ). 这里加入除法运算. 另外看到作者Pauls Gedanken在blog( ...
随机推荐
- SQL中Charindex和Oracle中对应的函数Instr
转:http://blog.csdn.net/zhuyu19911016520/article/details/8568640 sql :charindex('字符串',字段)>0 charin ...
- python 正则表达式实例
字符匹配 实例 描述 python 匹配 "python". 字符类 实例 描述 [Pp]ython 匹配 "Python" 或 "python&qu ...
- Confluence 6 Office 和 PDF 文件
插入一个文件到页面中是能够让你将有用的文件,电子表格,幻灯片或者其他可用的文件在你小组中进行分享的好方法. 针对所有的文件类型,你可以选择以链接方式插入一个文件.缩略图将会对文档的内容进行预览同时可以 ...
- HUD 1166:敌兵布阵(线段树 or 树状数组)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Des ...
- python3 set集合,以及字典,使用技巧
#set集合,无序不可重复setjh={'ofgh','gegds','uutytr'} setjh.add('uuuuu')#添加单个元素setjh.remove('ofgh')#删掉单个元素pri ...
- 缓存区溢出之slmail fuzzing
这是我们的实验环境 kali 172.18.5.118smtp windows2003 172.18.5.117 pop3 110 smtp 25 本机 172.18.5.114 已经知道slma ...
- hdjs---laravel 框架使用hdjs 实现多图上传功能
hdjs---laravel 框架使用hdjs 实现多图上传功能 一.总结 一句话总结: [在网上找hdjs的使用实例]和[能遇见讲hdjs的视频],也是完全搞懂hdjs的不错的方式 1.hdjs中的 ...
- project2016安装与破解
分步阅读 project2016发布增加了许多功能.Microsoft Office 2016 官方正式版发布!这是微软发布的全新办公软件套件,相比现有Office 2013的变化也不是很大,界面 ...
- var $this = $(this)
jQuery: What’s the Difference Between $(this), $this, and this? What about $this? $this is a little ...
- leetcode-easy-math-412 Fizz Buzz
mycode 99.06% class Solution(object): def fizzBuzz(self, n): """ :type n: int :rtype ...