java表达式求值

该博客介绍了如何使用Java编写一个程序,从键盘接收无括号的整数四则运算表达式,如'32+5*2-40/3',并按照运算符优先级和结合性进行分析求值。文章重点讨论了数字与运算符分隔以及中缀表达式运算的实现难点,并给出了运行示例。
摘要由CSDN通过智能技术生成

表达式求值

实验11:整数算术表达式分析程序
题目类别: B作业

关键字: 类、对象、封装、类之间的关系、字符串

内容要求:

  1. 编写一个Java应用程序。

  2. 要求实现功能如下:

(1) 从键盘输入一个表示整数四则运算的字符串,例如:32+5*2-40/3

四则运算符号:

+代表整数加法、-代表整数减法、*代表整数乘法、/代表整数除法(结果为整数)

运算数全部为正整数

表达式中没有括号

假设输入的字符串一定是符合上面规则的整数四则运算的表达式。

运算数和运算符号之间可能有个数不定(0个或多个)的空格。

(2) 程序按照四则运算符的优先级和结合性对表达式进行分析并产生输出结果。

  1. 运行示例:

输入:32+5*2-40/3

输出:29

本次实验比较困扰我的有两个地方,1.如何将数字与运算符分隔开,2.中缀表达式的运算;


package ddd;
import java.util.Scanner;
import java.util.Stack;

public class calculation {
   

	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个算术表达式: ");
		String s = input.nextLine();//因为输入有空格,所以用nextline
		String[] ss = s.split("\\b");//将数字和运算符分隔开
		
		/*去掉每个字符串中的空格,但是replace并不会替代掉原来的内容
		  所以得赋值给自身
		*/
		for(int i=0;i<ss.length;i++) {
   
			ss[i]=ss[i].replace(" ", "");
		}
		
		/*
		分别用两个栈存放数字和运算符
		用for-each检查每个字符串
		当该字符串为数字时,直接进数字栈
		当该字符串为运算符时:
			判断运算符栈里有无运算符,若无则进栈。
		    若有运算符则判断两个运算符的优先级大小
		    	如果当前运算符优先级>栈顶的运算符优先级,进栈
		    	如果当前运算符优先级<栈顶的运算符优先级,取出数字栈里的两个字符串进行计算。
		*/
		
		Stack<Integer> number = new Stack
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值