📄 expchange.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 + -