JAVA This program is for infix to postfix calculation I need

(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<Integer> operandStack = new Stack<Integer>();
       //Stack for Operators
       Stack<Character> operatorStack = new Stack<Character>();
       //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);
   }
}

Solution

For division exception you need to throw it back if you are catching it.

catch(DivisionException de){
throw new 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
(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
(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
(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

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site