Answered step by step
Verified Expert Solution
Link Copied!

Question

00
1 Approved Answer

How can I rewrite this code without using the EVAL ENGINE and with a Tokenizer : import java.util.*; import java.io.*; public class Tokenize { public

How can I rewrite this code without using the EVAL ENGINE and with

a Tokenizer:

import java.util.*; import java.io.*; public class Tokenize { public static void main( String[] args) { // Stolen directly from stackoverflow with just a few mods :) String expr="4+5-12/3.5-5.4*3.14"; // replace with any expression to test System.out.println( "expr: " + expr ); ArrayList operatorList = new ArrayList(); ArrayList operandList = new ArrayList(); // StringTokenizer is like an infile and calling .hasNext() StringTokenizer st = new StringTokenizer( expr,"+-*/", true ); while (st.hasMoreTokens()) { String token = st.nextToken(); if ("+-/*".contains(token)) operatorList.add(token); else operandList.add( Double.parseDouble( token) ); } System.out.println("Operators:" + operatorList); System.out.println("Operands:" + operandList); } } 

Code :

// Demonstrates JPanel, GridLayout and a few additional useful graphical features.

// adapted from an example by john ramirez (cs prof univ pgh)

import java.awt.*;

import java.awt.event.*;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;

import javax.swing.*;

public class SimpleCalc

{

JFrame window; // the main window which contains everything

Container content ;

JButton[] digits = new JButton[12];

JButton[] ops = new JButton[4];

JTextField expression;

JButton equals;

JTextField result;

public SimpleCalc()

{

window = new JFrame( "Simple Calc");

content = window.getContentPane();

content.setLayout(new GridLayout(2,1)); // 2 row, 1 col

ButtonListener listener = new ButtonListener();

// top panel holds expression field, equals sign and result field

// [4+3/2-(5/3.5)+3] = [3.456]

JPanel topPanel = new JPanel();

topPanel.setLayout(new GridLayout(1,3)); // 1 row, 3 col

expression = new JTextField();

expression.setFont(new Font("verdana", Font.BOLD, 16));

expression.setText("");

equals = new JButton("=");

equals.setFont(new Font("verdana", Font.BOLD, 20 ));

equals.addActionListener( listener );

result = new JTextField();

result.setFont(new Font("verdana", Font.BOLD, 16));

result.setText("");

topPanel.add(expression);

topPanel.add(equals);

topPanel.add(result);

// bottom panel holds the digit buttons in the left sub panel and the operators in the right sub panel

JPanel bottomPanel = new JPanel();

bottomPanel.setLayout(new GridLayout(1,2)); // 1 row, 2 col

JPanel digitsPanel = new JPanel();

digitsPanel.setLayout(new GridLayout(4,3));

for (int i=0 ; i<10 ; i++ )

{

digits[i] = new JButton( ""+i );

digitsPanel.add( digits[i] );

digits[i].addActionListener( listener );

}

digits[10] = new JButton( "C" );

digitsPanel.add( digits[10] );

digits[10].addActionListener( listener );

digits[11] = new JButton( "CE" );

digitsPanel.add( digits[11] );

digits[11].addActionListener( listener );

JPanel opsPanel = new JPanel();

opsPanel.setLayout(new GridLayout(4,1));

String[] opCodes = { "+", "-", "*", "/" };

for (int i=0 ; i<4 ; i++ )

{

ops[i] = new JButton( opCodes[i] );

opsPanel.add( ops[i] );

ops[i].addActionListener( listener );

}

bottomPanel.add( digitsPanel );

bottomPanel.add( opsPanel );

content.add( topPanel );

content.add( bottomPanel );

window.setSize( 640,480);

window.setVisible( true );

}

// We are again using an inner class here so that we can access

// components from within the listener. Note the different ways

// of getting the int counts into the String of the label

class ButtonListener implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

Component whichButton = (Component) e.getSource();

// how to test for which button?

// this is why our widgets are 'global' class members

// so we can refer to them in here

for (int i=0 ; i<10 ; i++ )

if (whichButton == digits[i])

expression.setText( expression.getText() + i );

// need to add tests for other controls that may have been

// click that got us in here. Write code to handle those

//Added Code to perform the Calculations

for(int i=0; i<4; i++)

{

if (whichButton == ops[i])

{

expression.setText( expression.getText() + ops[i].getText() );

}

}

//Create objects for the classes

ScriptEngineManager manageobj = new ScriptEngineManager();

//Evaluate the expressions

ScriptEngine scriptObj = manageobj.getEngineByName("JavaScript");

//get the expression through the getText() method

String evaluateExp = expression.getText();

//Using try-Catch to raise the exception, If the input is not valid

try

{

if(whichButton==equals)

{

result.setText((scriptObj.eval(evaluateExp)).toString());

}

}

catch (ScriptException exp1)

{

result.setText("Invalid Expression! ");

}

//If the button is C, the clear the input text box

if(whichButton==digits[10])

{

expression.setText("");

result.setText("");

}

//If the input is CE, then remove the last character entered in the input window

if(whichButton==digits[11]) //for CE button functionality

{

try

{

expression.setText(expression.getText().substring(0, expression.getText().length()-1));

result.setText("");

}

catch(Exception exp2)

{

result.setForeground(Color.RED);

}

}

}

}

public static void main(String [] args)

{

new SimpleCalc();

}

}

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access with AI-Powered Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Students also viewed these Databases questions