逆波兰表达式java(逆波兰表达式又叫做后缀表达式)

华为云服务器特价优惠火热进行中!

2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。

合作流程:
1、点击链接注册/关联华为云账号:点击跳转
2、添加客服微信号:cloud7591,确定产品方案、价格方案、服务支持方案等;
3、客服协助购买,并拉微信技术服务群,享受一对一免费技术支持服务;
技术专家在金蝶、华为、腾讯原厂有多年工作经验,并已从事云计算服务8年,可对域名、备案、网站搭建、系统部署、AI人工智能、云资源规划等上云常见问题提供更专业靠谱的服务,对相应产品提供更优惠的报价和方案,欢迎咨询。

本篇文章给大家谈谈逆波兰表达式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和逆波兰表达式又叫做后缀表达式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

发布于 2023-04-10 22:04:51
收藏
分享
海报
32
目录

    忘记密码?

    图形验证码

    复制成功
    微信号: cloud7591
    如需了解更多,欢迎添加客服微信咨询。
    我知道了