ok everything works good outside if i make .java of the classes with a main app
but when i put them together my Postfix one has a problem.
if you are confused just look at the main method
thats where the probelm arises. the thing is after i convert infix to postfix i output it
then i enter that output as input for evaluation of postfix. but according to the compiler its not of type string. PLEASE HELP

import java.io.*;            // for I/O
class Stacky
{
private int maxSize;
private int[] stackArray;
private int top;
//--------------------------------------------------------------
public Stacky(int size)      // constructor
   {
   maxSize = size;
   stackArray = new int[maxSize];
   top = -1;
   }
//--------------------------------------------------------------
public void push(int j)     // put item on top of stack
   { stackArray[++top] = j; }
//--------------------------------------------------------------
public int pop()            // take item from top of stack
   { return stackArray[top--]; }
//--------------------------------------------------------------
public int peek()           // peek at top of stack
   { return stackArray[top]; }
//--------------------------------------------------------------
public boolean isEmpty()    // true if stack is empty
   { return (top == -1); }
//--------------------------------------------------------------
public boolean isFull()     // true if stack is full
   { return (top == maxSize-1); }
//--------------------------------------------------------------
public int size()           // return size
   { return top+1; }
//--------------------------------------------------------------
public int peekN(int n)     // peek at index n
   { return stackArray[n]; }
//--------------------------------------------------------------
public void displayStack(String s)
   {
   System.out.print(s);
   System.out.print("Stack (bottom-->top): ");
   for(int j=0; j<size(); j++)
      {
      System.out.print( peekN(j) );
      System.out.print(' ');
      }
   System.out.println("");
   }
//--------------------------------------------------------------
} 
class StackX
   {
   private int maxSize;
   private char[] stackArray;
   private int[] stackArray1;
   private int top;

   public StackX(int s)       // constructor
      {
      maxSize = s;
      stackArray = new char[maxSize];
      top = -1;
      }
   public void push1(int j)     // put item on top of stack
   { stackArray1[++top] = j; }
   public void push(char j)  // put item on top of stack
      { stackArray[++top] = j; }

   public char pop()         // take item from top of stack
      { return stackArray[top--]; }
   public int peek1()           // peek at top of stack
   { return stackArray1[top]; }
   public char peek()        // peek at top of stack
      { return stackArray[top]; }

   public boolean isEmpty()  // true if stack is empty
      { return (top == -1); }

   public int size()         // return size
      { return top+1; }
   public int peekN1(int n)     // peek at index n
   { return stackArray[n]; }
   public char peekN(int n)  // return item at index n
      { return stackArray[n]; }

   public void displayStack(String s)
      {
      System.out.print(s);
      System.out.print("Stack (bottom-->top): ");
      for(int j=0; j<size(); j++)
         {
         System.out.print( peekN(j) );
         System.out.print(' ');
         }
      System.out.println("");
      }

   }  // end class StackX
////////////////////////////////////////////////////////////////
class InToPost                  // infix to postfix conversion
   {
   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()      // do translation to postfix
      {
      for(int j=0; j<input.length(); j++)      // for each char
         {
         char ch = input.charAt(j);            // get it
         theStack.displayStack("For "+ch+" "); // *diagnostic*
         switch(ch)
            {
            case '+':               // it's + or -
            case '-':
               gotOper(ch, 1);      // go pop operators
               break;               //   (precedence 1)
            case '*':               // it's * or /
            case '/':
               gotOper(ch, 2);      // go pop operators
               break;               //   (precedence 2)
            case '(':               // it's a left paren
               theStack.push(ch);   // push it
               break;
            case ')':               // it's a right paren
               gotParen(ch);        // go pop operators
               break;
            default:                // must be an operand
               output = output + ch; // write it to output
               break;
            }  // end switch
         }  // end for
      while( !theStack.isEmpty() )     // pop remaining opers
         {
         theStack.displayStack("While ");  // *diagnostic*
         output = output + theStack.pop(); // write to output
         }
      theStack.displayStack("End   ");     // *diagnostic*
      return output;                   // return postfix
      }  // end doTrans()

   public  void gotOper(char opThis, int prec1)
      {                                // got operator from input
      while( !theStack.isEmpty() )
         {
         char opTop = theStack.pop();
         if( opTop == '(' )            // if it's a '('
            {
            theStack.push(opTop);      // restore '('
            break;
            }
         else                          // it's an operator
            {
            int prec2;                 // precedence of new op

            if(opTop=='+' || opTop=='-')  // find new op prec
               prec2 = 1;
            else
               prec2 = 2;
            if(prec2 < prec1)          // if prec of new op less
               {                       //    than prec of old
               theStack.push(opTop);   // save newly-popped op
               break;
               }
            else                       // prec of new not less
               output = output + opTop;  // than prec of old
            }  // end else (it's an operator)
         }  // end while
      theStack.push(opThis);           // push new operator
      }  // end gotOp()

   public  void gotParen(char ch)
      {                             // got right paren from input
      while( !theStack.isEmpty() )
         {
         char chx = theStack.pop();
         if( chx == '(' )           // if popped '('
            break;                  // we're done
         else                       // if popped operator
            output = output + chx;  // output it
         }  // end while
      }  // end popOps()

   }  // end class InToPost
class ParsePost
{
private Stacky theStack1;
private String input;
//--------------------------------------------------------------
public ParsePost(String output)
   { input = output; }
//--------------------------------------------------------------
public int doParse(String output)
   {
   theStack1 = new Stacky(20);             // make new stack
   char ch;
   int j;
   int num1, num2; int interAns;

   for(j=0; j<input.length(); j++)       // for each char,
      {
      ch = input.charAt(j);              // read from input
      theStack1.displayStack(""+ch+" ");  // *diagnostic*
      if(ch >= '0' && ch <= '9')         // if it's a number
         theStack1.push( ((ch-'0') )); //   push it
      else                               // it's an operator
         {
         num2 = theStack1.pop();          // pop operands
         num1 = theStack1.pop();
         switch(ch)                      // do arithmetic
            {
            case '+':
               interAns = num1 + num2;
               break;
            case '-':
               interAns = num1 - num2;
               break;
            case '*':
               interAns = num1 * num2;
               break;
            case '/':
               interAns = num1 / num2;
               break;
            default:
               interAns = 0;
            }  // end switch
         theStack1.push(interAns);        // push result
         }  // end else
      }  // end for
   interAns = theStack1.pop();            // get answer
   return  interAns;
   }  // end doParse()
}  // end class ParsePost
class lab2
   {
	
	
   public static void main(String[] args) throws IOException
      {
      String input, output,newout;
      while(true)
         {
    	  String stuff;
         System.out.print("Enter infix: ");
         System.out.flush();
         input = getString();         // read a string from kbd
         if( input.equals("") )       // quit if [Enter]
            break;
                                      // make a translator
         InToPost theTrans = new InToPost(input);
         output = theTrans.doTrans(); // do the translation
         System.out.println("Postfix is " + output.toString());
         stuff = output.toString();
       
         ParsePost aParser = new ParsePost(input);
         output = (aParser.doParse(output));  // do the evaluation
         System.out.println("Postfix is " + output);
         }
         
      
      
      }  // end main()

   public static String getString() throws IOException
      {
      InputStreamReader isr = new InputStreamReader(System.in);
      BufferedReader br = new BufferedReader(isr);
      String s = br.readLine();
      return s;
      }

   }

Recommended Answers

All 5 Replies

You need to post the exact error message and the line it refers to. Also format your code listing with line numbers so we can see exactly where the error is.

You need to post the exact error message and the line it refers to. Also format your code listing with line numbers so we can see exactly where the error is.

The error is right here as i pointed out before, in the main method
""output = (aParser.doParse(output)); // do the evaluation""
output = (aParser.doParse(output)); // do the evaluation
that line

Type mismatch: cannot convert from int to String

So use String.valueOf(int).

commented: strongly approve and thanks so much +3

The error is right here as i pointed out before, in the main method
""output = (aParser.doParse(output)); // do the evaluation""
output = (aParser.doParse(output)); // do the evaluation
that line

Type mismatch: cannot convert from int to String

Well. you didn't give us the exact line before (unless I missed it).
Problem is that doParse returns an int and you're trying to assign it to a String variable. Either change the return type to String, or change "output" to int, or convert like Ezzaral says.

commented: thanks +3

So use String.valueOf(int).

my man, thank you, didint think of that at all.
thanks so much. in the nick of time .

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.