java 线性计算器_基于java的简易计算器实现

方法:

1.将string类型的表达式输入转换成后缀表达式

2.计算后缀表达式

步骤一:将string类型的表达式输入转换成后缀表达式

输入字符串表达式,并将表达式转换成char型数组

String a = "(5+5)*2-(4-2)/2";

char [] x = a.toCharArray();

Stack b = new Stack<>();

String back = "";//后缀表达式

后缀表达式实现

1. 遇到”(“时进栈

2. 遇到数字,将数字加入back字符串后面

3. 遇到”+“、”-“、”*“、”/“时,判断栈顶元素的优先级是否高于或等于该元素,如果是则依次出栈加入back直到栈顶元素优先级小于该元素,该元素进栈

4. 遇到”)“时,栈顶元素依次出栈直到栈顶为”(“,删除栈顶”(“元素

for (int i = 0; i

//System.out.println(back);

if(x[i] == '(') b.push(x[i]);

if(x[i] == '+' || x[i] == '-') {

while(!b.isEmpty() && (b.peek() == '*' || b.peek() == '/')) {

back = back + b.peek();

b.pop();

}

b.push(x[i]);

}

if(x[i] == '*' || x[i] == '/') {

while(!b.isEmpty() && (b.peek() == '*' || b.peek() == '/')) {

back = back + b.peek();

b.pop();

}

b.push(x[i]);

}

if(x[i] == ')') {

while (!b.isEmpty()){

if(b.peek() == '(') {b.pop(); break;}

//System.out.println(back);

back = back + b.peek();

b.pop();

}

}

if(x[i] >= '0' && x[i] <= '9') back = back + x[i];

}

while(!b.isEmpty()){

back += b.peek();

b.pop();

}

System.out.println(back);

步骤二:计算后缀表达式

1. 遇到数字则进栈

2. 遇到运算符时,取出栈顶两个元素进行计算

3. 直到栈为空

Stack bb = new Stack<>();

double p,q;

char [] xx = back.toCharArray();

for (int i = 0; i < xx.length; i++) {

if(xx[i] >= '0' && xx[i] <= '9') {

double s = (double) xx[i] - 48;

//System.out.println(s);

bb.push(s);

//System.out.println(xx[i] - 48);

}

if(xx[i] == '+'){

p = bb.peek();

bb.pop();

q = bb.peek();

bb.pop();

double result = p+q;

bb.push(result);

//System.out.println(result);

}

if(xx[i] == '-'){

p = bb.peek();

bb.pop();

q = bb.peek();

bb.pop();

double result = q-p;

bb.push(result);

//System.out.println(result);

}

if(xx[i] == '*'){

p = bb.peek();

bb.pop();

q = bb.peek();

bb.pop();

double result = p*q;

bb.push(result);

//System.out.println(result);

}

if(xx[i] == '/'){

p = bb.peek();

bb.pop();

q = bb.peek();

bb.pop();

double result = q/p;

bb.push(result);

//System.out.println(result);

}

}

int aaa = bb.peek().intValue();

System.out.println(aaa);

优势与局限

1. 该方法解决了优先级高无括号的问题

2. 该方法解决了除法生成小数的问题

3. 该方法仅限于0-9的简单计算

4. 该方法输入仅限于整数

声明:在十位数或以上的简单计算或是小数的简单计算上,如有好的方法告知

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值