Project2.java Main( ) //BOYD, TIMMOTHY R //PROJECT 2 package Project2; import java.util.*; import java.io.*; public class Project2 { private static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); //MAIN METHOD public static void main(String[] args)throws IOException { double result; double real, imaginary; char operands; int i=0; String expression, token, complex=""; StringTokenizer tokenizer; Stack stack = new Stack(); boolean working = true; System.out.println("Enter a postfix expression of complex numbers:"); expression = stdin.readLine(); tokenizer = new StringTokenizer(expression, ")(+-*i", true); token = tokenizer.nextToken(); while (tokenizer.hasMoreTokens()){ /*PUSHES THE WHOLE COMPLEX NUMBER IF THE TOKENIZER IS POSITIONED AT THE BEGINNING OF A COMPLEX NUMBER*/ if(token.equals( "(" )){ while(!token.equals( ")" )){ token = tokenizer.nextToken(); if(!token.equals( ")" )) complex += token; /*THE STRING COMPLEX IS NOW IN THE CORRECT FORM TO BE SENT TO THE FROMSTRING METHOD*/ }//END WHILE /*STRING SHOULD BE IN FORM 32+18i THE STRING COMPLEX IS THEN PASSED TO FROMSTRING, AND A COMPLEX OBJEC IS CREATED AND RETURNED*/ Complex pushed = Complex.fromString(complex); /*THE NEW OBJECT IS THEN PUSHED TO THE STACK*/ stack.push(pushed); complex=""; }//end if /*IF THE TOKENIZER IS AT THE END OF A COMPLEX NUMBER, MOVE ONE MORE TOKEN*/ if(token.equals( ")" )){ if(tokenizer.hasMoreTokens()){ token = tokenizer.nextToken(); /*IF THE TOKEN IS POSITIONED PAST A CLOSED PARENTHESES, AND A +- OR * IS NEXT ON TOKEN, THE OPERAND IS EXECUTED ON THE LAST TWO COMPLEX OBJECTS ADDED TO THE STACK*/ while( (token.equals("+")) || (token.equals("-")) || (token.equals("*")) ){ operands = token.charAt(0); Complex left = (Complex)stack.pop(); Complex right = (Complex)stack.pop(); Complex solution = (evaluate(left, right, operands) ); stack.push(solution); token=""; if(tokenizer.hasMoreTokens()){ token = tokenizer.nextToken();} }//end while }//end if more tokens }//end if }//end while /*THE FINAL OPERAND HAS BEEN EXECUTED, AND THE COMPLETED SOLUTION IS DISPLAYED ON THE SCREEN*/ Complex finished = (Complex)stack.pop(); System.out.println("The Result is:" + finished.toString() ); }//END MAIN /*DETERMINES WHAT OPERAND TO US, AND EXECUTES THE OPERAND EVALUATION BY PASSING THE INFORMATION TO THE APPROPRIATE METHOD*/ private static Complex evaluate(Complex right, Complex left, char operator) { Complex result = new Complex(); switch (operator) { case '+': result = right.add(left); break; case '-': result = right.subtract(left); break; case '*': result = right.multiply(left); break; }//end switch return result; }//end evaluate }//end class