Question: (JAVA) This program is for infix to postfix calculation. I need help on few points 1. I need code for ActionListener in Main.java 2. DivisionException

(JAVA) This program is for infix to postfix calculation.

I need help on few points

1. I need code for ActionListener in Main.java

2. DivisionException seems not work properly when I divide the number by 0.

3. And any other parts I have an error on.

Thank you in advance.

//Main.java

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*;

public class Main extends JFrame{ private GridLayout glm = new GridLayout(3, 1, 5, 20); private JPanel jp1 = new JPanel(); private JPanel jp2 = new JPanel(); private JPanel jp3 = new JPanel(); private GridLayout gl1 = new GridLayout (1, 2); private JLabel jl1 = new JLabel("Enter Infix Expression", JLabel.CENTER); private JTextField jtf1 = new JTextField(); private GridLayout gl2 = new GridLayout(1, 3, 5, 9); private JButton jbEvaluate = new JButton("Evaluate"); private GridLayout gl3 = new GridLayout(1, 2); private JLabel jl2 = new JLabel("Result", JLabel.CENTER); private JTextField jtf2 = new JTextField(); private int result; public String userInput(){ return jtf1.getText(); } public Main(){ setTitle("Infix Expression Evaluator"); setSize(500, 200); setLayout(glm); jp1.setLayout(gl1); jp1.add(jl1); jp1.add(jtf1); add(jp1); jp2.setLayout(gl2); jp2.add(new JLabel("")); jp2.add(jbEvaluate); jp2.add(new JLabel("")); add(jp2); jp3.setLayout(gl3); jp3.add(jl2); jp3.add(jtf2); jtf2.setEditable(false); jtf2.setBackground(Color.lightGray); add(jp3); setLocationRelativeTo(null); setResizable(true); setVisible(true); }

class EnterActionListener implements ActionListener{ public void actionPerformed(ActionEvent ae){ result = Evaluation.evaluate(userInput()); jtf2.setText(Integer.parseInt(result)); } } public static void main (String[] args){ Main main = new Main(); } }

===================================

//Evaluation.java

import java.util.*; import javax.swing.JOptionPane;

public class Evaluation { public static int evaluate(String expression){ char[] tokens = expression.toCharArray(); //Stack for numbers Stack operandStack = new Stack(); //Stack for Operators Stack operatorStack = new Stack(); //using for for(int i = 0; i < tokens.length; i++){ if(tokens[i] == ' '){ JOptionPane.showMessageDialog(null, "Blank space is unacceptable", "Spacing Error", JOptionPane.WARNING_MESSAGE); } //Token is a number, push it to stack if(tokens[i] >= '0' && tokens[i] <='9'){ //There can be multi digit number. create number as string StringBuffer numberString = new StringBuffer(); while(i < tokens.length && tokens[i] >= '0' && tokens[i] <= '9'){ numberString.append(tokens[i++]); } //converting numberString to integer and adding to array operandStack.push(Integer.parseInt(numberString.toString())); } //Encounter open bracket, push it to operator stack else if(tokens[i] == '('){ operatorStack.push(tokens[i]); } //Encounter closing bracket, evaluate and push result back in operand stack else if(tokens [i] == ')'){ while(operatorStack.peek()!='(') try { operandStack.push(evaluateOperation(operatorStack.pop(), operandStack.pop(), operandStack.pop())); } catch (DivisionException de) { new DivisionException(); } operatorStack.pop(); } //Encounter a operator else if(tokens[i] == '+' || tokens[i] == '-' || tokens[i] == '*' || tokens[i] == '/'){ while(!operatorStack.empty() && isHigherPrecedence(tokens[i], operatorStack.peek())){ try { operandStack.push(evaluateOperation(operatorStack.pop(), operandStack.pop(), operandStack.pop())); } catch (DivisionException de) { new DivisionException(); } } //Push current token to 'op' operatorStack.push(tokens[i]); } } while(!operatorStack.empty()){ try { operandStack.push(evaluateOperation(operatorStack.pop(), operandStack.pop(), operandStack.pop())); } catch (DivisionException de) { new DivisionException(); } } //operandStack now contain result return operandStack.pop(); } //check for precedence order public static boolean isHigherPrecedence(char op1, char op2){ if(op2 == '(' || op2 == ')') return false; if((op1 == '*' || op1 == '/') && (op2 == '+' || op2 == '-')) return false; else return true; } //evaluate result of operator on operand b and a public static int evaluateOperation(char op, int b, int a) throws DivisionException{ try{ switch(op){ case '+': return a+b; case '-': return a-b; case '*': return a*b; case '/': if(b == 0){ throw new DivisionException(); } else return a/b; } }catch(DivisionException de){ new DivisionException(); } return 0; } public static void main(String[] args){ System.out.println(Evaluation.evaluate("900/0")); System.out.println(Evaluation.evaluate("(3+4/2)+6/2-7")); } }

==================

//DivisionException.java

import javax.swing.JOptionPane;

public class DivisionException extends Exception{ public DivisionException(){ JOptionPane.showMessageDialog(null, "Division Error", "Cannot divide a number by 0", JOptionPane.WARNING_MESSAGE); } }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!