Code: import java.io.*; import java.util.*; public class Mlab2 { // initialize two stacks: operator and operand private static Stack operatorStack = new Stack(); private static Stack operandStack = new Stack(); // method converts infix expression to postfix notation private static String toPostfix(String infix) { StringTokenizer s = new StringTokenizer(infix); // divides the input into tokens for input String symbol, postfix = ""; while (s.hasMoreTokens()) // while there is input to be read { symbol = s.nextToken(); // if it's a number, add it to the string if (Character.isDigit(symbol.charAt(0))) postfix = postfix + " " + (Integer.parseInt(symbol)); else if (symbol.equals("(")) // push "(" { Character operator = new Character('('); operatorStack.push(operator); } else if (symbol.equals(")")) // push everything back to "(" { while (((Character)operatorStack.peek()).charValue() != '(') { postfix = postfix + " " + operatorStack.pop(); } operatorStack.pop(); } else // print operatorStack occurring before it that have greater precedence { while (!operatorStack.empty() && !(operatorStack.peek()).equals("(") && prec(symbol.charAt(0)) <= prec(((Character)operatorStack.peek()).charValue())) postfix = postfix + " " + operatorStack.pop(); Character operator = new Character(symbol.charAt(0)); operatorStack.push(operator); } } while (!operatorStack.empty()) postfix = postfix + " " + operatorStack.pop(); return postfix; } // method evaulates postfix expression private static int evaluate(String postfix) { StringTokenizer s = new StringTokenizer(postfix); // divides the input into tokens for input int value; String symbol; while (s.hasMoreTokens()) { symbol = s.nextToken(); if (Character.isDigit(symbol.charAt(0))) // if it's a number, push it onto stack { Integer operand = new Integer(Integer.parseInt(symbol)); operandStack.push(operand); } else // if it's an operator, operate on the previous two popped operandStack items { int op2 = ((Integer)operandStack.pop()).intValue(); int op1 = ((Integer)operandStack.pop()).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; } case '^': { result = op1 ^ op2; break; } } Integer operand = new Integer(result); operandStack.push(operand); } } value = ((Integer)operandStack.pop()).intValue(); return value; } // method compares operators to establish precedence private static int prec(char x){ if (x == '+' || x == '-'){ return 1; } else if (x=='^' && x == '*' || x == '/' || x == '%'){ return 2; } else{ return 0; } } public static void main(String args[]) throws IOException{ String infix; BufferedReader keyboard = new BufferedReader (new InputStreamReader(System.in)); System.out.print("Input a infix: "); infix = keyboard.readLine(); System.out.println("Expression in postfix:" + toPostfix(infix)); System.out.println("Evaluated expression: " + evaluate(toPostfix(infix))); } } error occured Code: Input a infix: 1+1 Exception in thread "main" java.lang.NumberFormatException: For input string: "1 +1" at java.lang.NumberFormatException.forInputString(NumberFormatException. java:48) at java.lang.Integer.parseInt(Integer.java:456) at java.lang.Integer.parseInt(Integer.java:497) at Mlab2.toPostfix(Mlab2.java:23) at Mlab2.main(Mlab2.java:125) before that it has a warning when i build it. Code: Note: D:\syfer\Mlab2.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. Process completed. and 1 more think i also need a help about my infix to prefix
Code: import java.io.*; import java.util.*; public class Mlab2{ private static Stack operatorStack = new Stack (); private static Stack operandStack = new Stack (); private static String toPostfix(String infix){ StringTokenizer s = new StringTokenizer(infix); String symbol, postfix = ""; while (s.hasMoreTokens()){ symbol = s.nextToken(); if (Character.isDigit(symbol.charAt(0))){ postfix = postfix + " " + (Integer.parseInt(symbol)); }else if (symbol.equals("(")){ Character operator = new Character('('); operatorStack.push(operator); }else if (symbol.equals(")")){ while (((Character)operatorStack.peek()).charValue() != '('){ postfix = postfix + " " + operatorStack.pop(); } operatorStack.pop(); }else{ while (!operatorStack.empty() && !(operatorStack.peek()).equals("(") && prec(symbol.charAt(0)) <= prec(((Character)operatorStack.peek()).charValue())) postfix = postfix + " " + operatorStack.pop(); Character operator = new Character(symbol.charAt(0)); operatorStack.push(operator); }} while (!operatorStack.empty()) postfix = postfix + " " + operatorStack.pop(); return postfix; } private static String toPrefix(String infix){ StringTokenizer pre = new StringTokenizer(infix); String symbol1 , prefix= ""; while(pre.hasMoreTokens()){ symbol1 = pre.nextToken(); if(Character.isDigit(symbol1.charAt(0))){ prefix = prefix+ " " +(Integer.parseInt(symbol1)); }else if(symbol1.equals("(")){ Character operand = new Character('('); operandStack.push(operand); }else if(symbol1.equals(")")){ while (((Character)operandStack.peek()).charValue()!= '('){ prefix = prefix + " " + operandStack.pop(); } operandStack.pop(); }else{ while(!operandStack.empty()&&!(operandStack.peek()).equals("(") && prec(symbol1.charAt(0))<= prec(((Character)operandStack.peek()).charValue())) prefix = prefix + " "+ operandStack.pop(); Character operand = new Character(symbol1.charAt(0)); operandStack.push(operand); }} while(!operandStack.empty()) prefix = prefix + " " +operandStack.pop(); return prefix; } private static int evaluate(String postfix){ StringTokenizer s = new StringTokenizer(postfix); int value; String symbol; while (s.hasMoreTokens()){ symbol = s.nextToken(); if (Character.isDigit(symbol.charAt(0))){ Integer operand = new Integer(Integer.parseInt(symbol)); operandStack.push(operand); }else { int op2 = ((Integer)operandStack.pop()).intValue(); int op1 = ((Integer)operandStack.pop()).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; } case '^': { result = op1 ^ op2; break; } } Integer operand = new Integer(result); operandStack.push(operand); } } value = ((Integer)operandStack.pop()).intValue(); return value; } private static int prec(char x){ if (x == '+' || x == '-'){ return 1; } else if (x=='^' && x == '*' || x == '/' || x == '%'){ return 2; } else{ return 0; } } public static void main(String args[]) throws IOException{ BufferedReader keyboard = new BufferedReader (new InputStreamReader(System.in)); String infix; System.out.print("Input a infix: "); infix = keyboard.readLine(); System.out.println("Expression in postfix:" + toPostfix(infix)); System.out.println("Expression in prefix: " + toPrefix(infix)); } } code has been edited to this but my problem now is the answer im looking for is not appearing like i input'd a infix : a+b the answers are: POSTFIX: a PREFIX: a which are not the real answer. kindly please help me out