逆波兰表达式java(逆波兰表达式又叫做后缀表达式)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
本篇文章给大家谈谈逆波兰表达式java,以及逆波兰表达式又叫做后缀表达式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
怎样用JAVA写出逆波兰表达式求值部分的源代码(提供代码框架)
下面的代码是用来计算表达式的,看看是不是你要的
public class OPNode {
char op;// 运算符号
int level;// 优先级
//设置优先级
public OPNode(String op) {
this.op = op.charAt(0);
if (op.equals("+") || op.equals("-")) {
this.level = 1;
} else if (op.equals("*") || op.equals("/")) {
this.level = 2;
} else if (op.equals("(")) {
this.level = -3;
} else {
this.level = -1;
}
}
}
//主类
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class OPText {
public static void main(String[] args) {
String expression = "2+2+(8-2)/3";// 要计算的表达式
List list = new LinkedList();
//正则式
Pattern entryOfExpression = Pattern
.compile("[0-9]+(\\.[0-9]+)?|\\(|\\)|\\+|-|\\*|/");
Deque stack = new LinkedList();//栈
Matcher m = entryOfExpression.matcher(expression);
while (m.find()) {
//提取语素
String nodeString = expression.substring(m.start(), m.end());
if (nodeString.matches("[0-9].*")) {
list.add(Double.valueOf(nodeString));//如果是数字直接送入列表
} else {
OPNode opn = new OPNode(nodeString);//如果是运算符
int peekLevel = (stack.peek() == null) ? 0 : ((OPNode) stack
.peek()).level;
if (opn.level =peekLevel) {
stack.push(opn);//新的运算符比旧的优先级别高则入栈
} else {
if (opn.level == -1) {
OPNode temp = (OPNode) stack.pop();
while (temp.level != -3) {//如果为"("则一直出栈一直到")"
list.add(temp);
System.out.println(nodeString);
temp = (OPNode) stack.pop();
}
} else if (opn.level == -3) {
stack.push(opn);
} else {//如果新运算符比栈顶运算符底则一直出栈
OPNode temp = (OPNode) stack.pop();
while (temp.level opn.level) {
list.add(temp);
if (stack.isEmpty()) {
break;
}
temp = (OPNode) stack.pop();
}
stack.push(opn);
}
}
}
}
OPNode temp = null;
while (!stack.isEmpty()) {
temp = (OPNode) stack.pop();
list.add(temp);
}//后续表达式计算
stack.clear();
for (Object o : list) {
if (o instanceof Double) {
stack.push(o);//为数字入栈
} else {
double op2 = ((Double) stack.pop()).doubleValue();
double op1 = ((Double) stack.pop()).doubleValue();
switch (((OPNode) o).op) {
case '+':
stack.push(op1 + op2);
break;
case '-':
stack.push(op1 - op2);
break;
case '*':
stack.push(op1 * op2);
break;
case '/':
stack.push(op1 / op2);
break;
}
}
}
System.out.println("结果为:" + stack.pop());
}
}
呃,太晚了,没心思去改了
明天再说
用Java写的计算器的程序!不需要界面!
用java写的计算器的程序,主要是通过控制台输入,主要方法是使用scanner类来接收用户从键盘输入的一个算式,通过分解算式,存入两个字符串,判断中间的的符号,进行相应计算,如下代码:
System.out.println("-----------------------------------");
System.out.println("请输入一个算术表达式,如:45*23");
Scanner in = new Scanner(System.in);//接收用户从键盘输入的字符
String str = in.nextLine();
StringBuffer buffer = new StringBuffer();//保存左侧的数字
StringBuffer buffer1 = new StringBuffer();//保存右侧的数字
char t = ' ';//保存运算符
for (int i = 0; i str.length(); i++) {
if (str.charAt(i) == '+' || str.charAt(i) == '-'
|| str.charAt(i) == '*' || str.charAt(i) == '/') {
t = str.charAt(i);//识别是什么运算符
for (int j = i + 1; j str.length(); j++) {
buffer1.append(str.charAt(j));
}
break;
} else {
buffer.append(str.charAt(i));
}
}
String c = buffer.toString();
String d = buffer1.toString();
double a = Double.parseDouble(c);
double b = Double.parseDouble(d);
double sum = 0;
if (t == '+') {
sum = a + b;
}
if (t == '-') {
sum = a - b;
}
if (t == '*') {
sum = a * b;
}
if (t == '/') {
sum = a / b;
}
System.out.println("程序运算...");
System.out.println(c+t+d+"="+sum);
System.out.print("-----------------------------------");
运行结果如下:

java 设计算法,计算用后缀表示法表示的算术表达式的值。
你好!
后缀表达式也称逆波兰表达式,其优点就在于可以方便的用栈实现表达式的值的计算。和你说一下思路吧:
·从头读入表达式
·如果遇到数则将其压入栈
·如果遇到运算符,从栈中弹出栈顶连个数,实行相应运算,将结果压入栈中
·直到表达式尾,此时栈中应该只有一个元素,即运算结果
·Over
如果对你有帮助,望采纳。
关于逆波兰表达式java和逆波兰表达式又叫做后缀表达式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
