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

📄 expchange.java

📁 一个java源代码包
💻 JAVA
字号:
//表达式转换


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

public  class ExpChange{
	public static void main(String args[])throws Exception
	{
		StackArray Operator =new StackArray();
		String Inorder=new String();
		int InPosition=0;
		int Operator1=0;
		
		System.out.println("Please input the inorder expression: ");
		
		
		InputStreamReader ir;
		BufferedReader in;
		ir=new InputStreamReader(System.in);
		in=new BufferedReader(ir);
		Inorder=in.readLine();

		System.out.print("The posinorder expression is [");
		
		while(true)
		{
			char  ch=(char)Inorder.charAt(InPosition);
			//if(ch=='(')
			//System.out.println("111111111111111"+"        "+ch);
			if(Operator.IsOperator(ch))
			{
				if(Operator.Top==-1||ch=='(')
				{
				   Operator.Push(ch);
				   //System.out.println("2222222222222222"+"       "+ch);
				}
				else
				{
					if(ch==')')
					{
						
						while(Operator.Astack[Operator.Top]!=40)  //源程序中的Bug 需要将if改成while
						{
							Operator1=Operator.Pop();
							System.out.print((char)Operator1);
						}
						Operator.Pop();							  //源程序中的bug需要添加此语句
					}
					else
					{
						if(Operator.Priority(ch)<=
						Operator.Priority(Operator.Astack[Operator.Top])&&Operator.Top!=-1)	
						{
							Operator1=Operator.Pop();
							if(Operator1!=41)
							System.out.print((char)Operator1);
						}
						Operator.Push(ch);
					}
				}
			}
			else 
				System.out.print(ch);
			InPosition++;
			if(InPosition>=Inorder.length())
			break;
		
		}
		
		while(Operator.Top!=-1)
		{
			Operator1=Operator.Pop();
				System.out.print((char)Operator1);
		}
			System.out.println("]");
	}
}
		


			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||Operator==40||Operator==41)
					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;
			}
		}

⌨️ 快捷键说明

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