⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 posexpression.java

📁 一个java源代码包
💻 JAVA
字号:
//后序表达式的计算处理过程和前序表示相同,唯一不同的是读取表达式的方向和前序表达式相反。而是从左向右读取。
//操作方法:1、建立操作数的堆栈。初始为空。
//			2、当 表达式尚未读取完时,(由左向右)一个运算单元。
//  			当读取的是操作数,则将其存入操作数堆栈。
//              当读取的是运算符,则从操作数堆栈中读取出所需要的操作数进行计算,并将计算结果存回堆栈
//			3、当表达式读取完成后,则操作数堆栈的内容即为表达式的计算结果。


// source code

//输入一个表达式,并计算其值。

import java.util.*;
import java.io.*;


public class posexpression{
	public static void main(String args[])throws Exception{
		StackArray Operand=new StackArray();
		String Expression=new String(); //声明表达式字符串
		int Position=0;  //表达式位置
		int Operand1=0;  //前操作数
		int Operand2=0;  //后操作数
		int Evaluate=0;  //
		
		System.out.println("Please imput the postorder expression: ");
		
		InputStreamReader ir;
		BufferedReader in;
		ir=new InputStreamReader(System.in);
		in=new BufferedReader(ir);
		Expression=in.readLine();
		
		while(true)
		{
			if(Operand.IsOperator(Expression.charAt(Position)))
			{
				Operand1=Operand.Pop();
				Operand2=Operand.Pop();
				//计算后两个操作数存入堆栈;
				Operand.Push(Operand.TwoResult(Expression.charAt(Position),Operand1,Operand2));
			}
			else
			//存入操作数堆栈--需要左ASII码转换
			Operand.Push(Expression.charAt(Position)-48);
			Position++;
			if(Position>=Expression.length())
			break;
					
		}
		
		
		//取出最终表达式
		Evaluate=Operand.Pop();
		System.out.print("The expression [ "+Expression+"]");
		System.out.print(" result is "+Evaluate);
		
	}
}
class StackArray
{
	int MaxSize=20;
	int [] Astack = new int[MaxSize];
	int Top=-1;
//------------------------------------------------------
//存入堆栈数据
//-------------------------------------------------------

	public void Push(int value)
	{
		int i;
		if(Top>=MaxSize)  //判断是否已经熬出堆栈最大容量
			System.out.print("The stack is full");
		else 
		{
			Top++;
			Astack[Top]=value;
		}
	}
//------------------------------------------------------
//从堆栈中取出数据
//-------------------------------------------------------	
	public int Pop()
	{
		int Temp;   //暂存从堆栈取出来的数据
		int i;      //循环计数变量
		if(Top<0)	
		{
			System.out.println("The stack is Empty!");
			return -1;
		}
		Temp=Astack[Top];
		Top--;
		
		
		return Temp;
	}
	
//------------------------------------------------------
//判断是否是运算符号
//-------------------------------------------------------	
	public boolean IsOperator(int Operator)
	{
		if(Operator==43||Operator==45||Operator==42||Operator==47)
			return  true;    //+ - * /
		else  
			return false;
	}
//------------------------------------------------------
//判断运算符的优先权
//-------------------------------------------------------

	public int Priority (int operator)
	{
		if(operator==43||operator==45)
			return 1;			//+  -
		else if(operator==42||operator==47)
			return 2;             //*  /
		else 
			return 0;
	}
//------------------------------------------------------
//对任意两个操作数进行运算并求值
//-------------------------------------------------------
	public int TwoResult(int operator, int operand1,int operand2)
	{
		switch(operator)
		{
			case 43:
				return (operand1+operand2);
			case 45:
				return (operand1-operand2);
			case 42:
				return (operand1*operand2);
			case 47:
				return (operand1/operand2);	
		}
		return 0;
			
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -