返回首页

您好,我有个问题与线126
什么错plz帮助我

package itp2;

import java.util.*;

import java.io.*;

class StackX

{

private int maxSize;

private char[] stackArray;

private int[] stackArray1;

private int top;

 

public StackX(int s)

{

maxSize = s;

stackArray = new char[maxSize];

top = -1;

}

 

public void push(char j)

{ stackArray[++top] = j; }

 

public void push1(int j)

{ stackArray1[++top] =j ; }

 

public char pop()

{ return stackArray[top--]; }

public int pop1()

{ return stackArray[top--]; }

public char peek()

{ return stackArray[top]; }

 

public boolean isEmpty()

{ return (top == -1); }

 

public int size()

{ return top+1; }

 

public char peekN(int n)

{ return stackArray[n]; }

 

 

 

} // end class StackX used from lab1

 

class InToPost // infix to postfix conversion borrowed from book

{

private StackX theStack;

private String input;

private String output = "";

 

public InToPost(String in) // constructor

{

input = in;

int stackSize = input.length();

theStack = new StackX(stackSize);

}

 

public String doTrans() // algorithm that does translation with cases

{

for(int j=0; j<input.length(); j++)

{

char ch = input.charAt(j);

 

switch(ch)

{case '+':gotOper(ch, 1); break;

case '-':gotOper(ch, 1); break;

case '*':gotOper(ch, 2); break;

case '/':gotOper(ch, 2); break;

default :output = output + ch; break; //writes to output

} // end of switch

} // end for loop

while( !theStack.isEmpty() ) // pop remaining operators at the end

{

output = output + theStack.pop(); // write to output

}

return output; // return postfix

}

//--------------------------------------------------------------

public void gotOper(char opThis, int prec1)

{

while( !theStack.isEmpty() )

{

char opTop = theStack.pop();

 

if(1==1 )

{

int prec2;

 

if(opTop=='+' || opTop=='-') // find new op prec

prec2 = 1;

else

prec2 = 2;

if(prec2 < prec1)

{

theStack.push(opTop);

break;

}

else

output = output + opTop;

}

} // end while loop

theStack.push(opThis);

}

}

public class ITP2 {

public static void main(String[] args) throws IOException

{

String output;

String input;

while(true)

{

System.out.print("Enter infix: ");

System.out.flush();

input = getString();

if( input.equals("") )

break;

 

InToPost theTrans = new InToPost(input);

output = theTrans.doTrans();

 

 

 

System.out.println("Evaluated expression: " + (output));

// Eval ev = new Eval(output);

//  System.out.println("Evaluated expression: " + evaluate(theTrans.doTrans(output)));

 

System.out.println("Postfix is " + evaluate(output)) ;

}

}

 public class Eval{

private StackX operatorStack ;

private StackX operandStack;

private String output;

 

public int evaluate( String output)

{

StringTokenizer s = new StringTokenizer(output);//divides into tokens

 

int value;

String symbol;

while (s.hasMoreTokens())

{

symbol = s.nextToken();

if (Character.isDigit(symbol.charAt(0)))// if its a number push it

 

{

Integer operand = new Integer(Integer.parseInt(symbol));

operandStack.push1(operand);

}

else // if it's an operator, operate on the previous two popped operandStack items

{

int op2 = ((Integer)operandStack.pop1()).intValue();

int op1 = ((Integer)operandStack.pop1()).intValue();

int result = 0;

switch(symbol.charAt(0))

{

case '*': {result = op1 * op2; break;}

case '+': {result = op1 + op2; break;}

case '-': {result = op1 - op2; break;}

case '/': {result = op1 / op2; break;}

case '%': {result = op1 % op2; break;}

}

Integer operand = new Integer(result);

operandStack.push1(operand);

}

}

value = ((Integer)operandStack.pop1()).intValue();

return value;

}

 

}

 

public static String getString() throws IOException

{

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

String s = br.readLine();

return s;

}

 

}

回答

评论会员:t 时间:2