计算器代码

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实现整数计算器的更多相关文章

  1. java 基础 整数类型

    1.Java有四种整数类型:byte.short.int和long. 2.Java默认整数计算的结果是int类型. 3.整数的字面量是int类型. 4.若字面量超过int类型的最大值,则字面量是lon ...

  2. Java打印整数的二进制表示(代码与解析)

    Java打印整数的二进制表示(代码与解析) int a=-99; for(int i=0;i<32;i++){ int t=(a & 0x80000000>>>i)&g ...

  3. Java之整数运算

    Java的整数运算遵循四则运算规则,可以使用任意嵌套的小括号.四则运算规则和初等数学一致.例如: public class Main { public static void main(String[ ...

  4. Java 判断整数方法

    今天写代码的时候突然想到要怎么来判断整数,然后通过判断是否是整数来处理相关的操作.开始想到了几个方法,比如百度到的 x(int) instanceof Integer,但是这样的话程序会报错,还有一个 ...

  5. Java SWT 做计算器。

    java  --  swt  - -  计算器 环境搭建 安装java.eclipse.以及对应的swt插件. 开始工程 建立工程: 在java下建立一个在其他 —- WindowsBuilder — ...

  6. java中整数类型(short int long)的存储方式

    在java中的整数类型有四种,分别是 byte  short int long 其中byte只有一个字节 0或1,在此不详细讲解. 其他的三种类型如下: 1.基本类型:short 二进制位数:16包装 ...

  7. Java语言编写计算器(简单的计算器)

    Java编写的一个简单计算器,本人还比较菜,只能这样了,有点代码冗余,不能连续计算. import javax.swing.*; import java.awt.*; import java.awt. ...

  8. java SWT/Rap 计算器版本2(键盘鼠标兼容)

    package cn.lesaas.nof.rwtswt.ui.dialog; import java.math.BigDecimal; import org.eclipse.swt.SWT;impo ...

  9. 自己动手写Java大整数《3》除法和十进制转换

    之前已经完毕了大整数的表示.绝对值的比較大小.取负值.加减法运算以及乘法运算. 详细见前两篇博客(自己动手写Java * ). 这里加入除法运算. 另外看到作者Pauls Gedanken在blog( ...

随机推荐

  1. Centos 由字符界面 init 3 切换图形界面 init 5

    Centos6 和 Centos7 由字符界面切换成 图形界面方法不同,下面分别介绍. 一.Centos6 切换方法 yum -y install xorg* yum -y groupinstall ...

  2. 计算机网络(二),TCP/IP四层模型常见协议

    目录 1.应用层协议 2.传输层协议 3.网络层协议 4.链路层协议 二.TCP/IP四层模型常见协议 1.应用层协议 (1)POP3 (2)FTP (3)HTTP (4)Telnet (5)SMTP ...

  3. CF603E Pastoral Oddities 优先队列+结论+LCT维护生成树

    首先,一个神奇的结论:一个合法的方案存在的条件是每一个联通块的节点数都是偶数个的. 这个可以用数学归纳法简单证一证. 证出这个后,我们只需动态加入每一个边,并查看一下有哪些边能够被删除(删掉后联通块依 ...

  4. R_Studio(学生成绩)对数据进行属性构造处理

    对“Gary.csv”中数据进行进行属性构造处理,增加“总成绩”属性 Gary.csv setwd('D:\\data') list.files() #数据读取 dat=read.csv(file=& ...

  5. php的intval函数

    PHP intval() 函数 PHP 可用的函数PHP 可用的函数 intval() 函数用于获取变量的整数值. intval() 函数通过使用指定的进制 . PHP , PHP , PHP 语法 ...

  6. springmvc文件上传 参数为MultipartFile 转换为File

    package cn.com.mcd.controller;import java.io.File;import java.io.IOException;import java.io.Serializ ...

  7. 关于JDK8对List的分组汇总

    1. 跟据某个属性分组OfficeId: Map<String, List<IncomeSumPojo>> collect = list.stream().collect(Co ...

  8. 函数-this

    1.this. 解析器在调用函数的时候,每次都会向函数内部传递进一个隐含的参数(即this): this指向一个对象,这个对象称为函数执行的上下文对象.根据函数的调用方式的不同,this会指向不同的对 ...

  9. android 注入框架 DI

    android 主要注入框架以及github如下: (1)Roboguice https://github.com/roboguice/roboguice (2)Butterknife https:/ ...

  10. leetcode-easy-sorting and searching- 278 First Bad Version

    mycode  96.42 # The isBadVersion API is already defined for you. # @param version, an integer # @ret ...