又多括号处理了啊还是贴代码把
估计是pop循环那里出问题了

解决方案 »

  1.   

    源代码如下import java.io.*;public class InorderToPostorder{

    public static void main(String args[]){

    int Position=0;
    String InorderExpression="";
    int Operator=0;
    char Temp='0';
    BufferedReader BR= new BufferedReader(new InputStreamReader(System.in) );
    StackArray OperatorStack=new StackArray();

    System.out.println("Please Input the InorderExpression!");

    try{
    InorderExpression=BR.readLine();

    }catch(IOException e){

    }

    System.out.print("The PostExpression is [");

    while(Position<InorderExpression.length()){

    Temp=InorderExpression.charAt(Position);

    if(OperatorStack.isOperator((int)Temp)){

    if(OperatorStack.Top==-1||Temp=='('){

    OperatorStack.push((int)Temp); }else{

    if(Temp==')'){

    while( (char)(Operator=OperatorStack.pop())!='(' ){

    System.out.print((char)Operator);
    }
    }else{

    if(OperatorStack.setPriority((int)Temp)<=OperatorStack.setPriority(OperatorStack.peek())){

    Operator=OperatorStack.pop();

    if((char)Operator!='('){
    System.out.print((char)Operator);
    }

    OperatorStack.push((int)Temp);
    }else{


    System.out.print(Temp);
    }


    }
    }
    }else{

    System.out.print(Temp);

    }

    Position++;

    }

    while(OperatorStack.Top!=-1){

    Operator=OperatorStack.pop();
    System.out.print((char)Operator);

    }

    System.out.println("]");

    }
    }class StackArray{

    int MaxSize=20;
    int AStack[]=new int[20];
    int Top=-1;


    //////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////
    public void push(int Value){

    if(Top==MaxSize-1)
    System.out.println("The Stack is full!");
    else{

    Top++;
    AStack[Top]=Value;
    }

    }


    //////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////

        public int pop(){
        
         int Temp=0;
        
         if(Top==-1){
         System.out.println("The Stack is empty!");
         return -1;
         }
        
         else{
        
         Temp=AStack[Top];
         Top--;
         return Temp;
         }
        }

    //////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////

    public boolean isOperator(int Operator){

    switch(Operator){

    case 43:

    case 45:

    case 42:

    case 47:

    case 40:

    case 41:

    return true;

    default:

    return false;
    }

    }
    //////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////// public int setPriority(int Operator){

    switch(Operator){

    case 40:

    case 43:

    case 45:

    return 1;


    case 42:

    case 47:

    return 2;


    default:
    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);

    default :
    return -1;
    }

    }



    //////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////

    public int peek(){

    if(Top==-1){

    System.out.println("The Stack is Empty!");
    return -1;
    }
    else{

    return AStack[Top];

    }

    }

    }
      

  2.   

    while( (char)(Operator=OperatorStack.pop())!='(' ){改成
    while((Operator=OperatorStack.pop())!=40){
      

  3.   

    对不起看错了
    应该改这里
    if(OperatorStack.setPriority((int)Temp)<=OperatorStack.setPriority(OperatorStack.peek())){<=改为<
    if(OperatorStack.setPriority((int)Temp)<OperatorStack.setPriority(OperatorStack.peek())){
      

  4.   

    就感觉<=改成<会有问题
    这样还是改回<=然后while( (char)(Operator=OperatorStack.pop())!='(' ){
    改成
    while( (char)(Operator=OperatorStack.pop())!='(' && OperatorStack.Top!=-1){
    强制停止循环虽然别扭,但结果好像是对的,你再验证看看