Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

REALLY NEED HELP ON THE FOLLOWING PROGRAM ASSIGNMENT: You must hand in a single file named SimpleCalc.java for your project-07 submission. It will not, cannot,

REALLY NEED HELP ON THE FOLLOWING PROGRAM ASSIGNMENT:

You must hand in a single file named SimpleCalc.java for your project-07 submission.

It will not, cannot, be script graded. It will be checked for compilation success at handin time.

This skeleton program must be enhanced as follows:

Your implementation of actionListener will contain your code that responds to button clicks or text entries on the calculator's surface.

You muat allow entries using either the keys or by typing text into the expression text field.

The CE button must clear the last char of the operand entered while the C button must clear the entire expression textfield

The equals button must calculate the result and write the resulting value into the result textfield. You must write the evaluation function. We will discuss this in class. Your evaluation must evaluate each operator for it's true precedence. This little bit of logic will take some work!

You must recognized a badly formed expression and put something like "INVALID EXPRESSION" into the result text field.

Here is an illustration of how you can extract the operators/operands from an expression String and store them into two ARrayLists named operators and operands respectively: Tokenize.java

Once you have an ArrayList of operands and an ArrayList of operators you can evaluate the expression with the following algorithm:

 WHILE THERE ARE ANY * OR / OPERATORS REMAINING FIND THE FIRST OCCURANCE OF * OR / AT INDEX INDEX THE OPERANDS WILL BE AT INDEX I AND I+1 PERFORM THE * OR / OPERATION ON THOSE 2 OPERANDS REPLACE THOSE TWO OPERANDS WITH THE RESULT REMOVE THE OPERATOR YOU JUST PEOCESSED FROM THE OPERATORS LIST END WHILE GO BACK AND DO THE EXACT SAME LOOP AS ABOVE BUT PROCESS + AND - OPERATORS IF YOUR EXPRESSION WAS VALID THEN THE FOLLOWING WILL BE TRUE OTHERWISE YOU HAVE BOGUS EXPRESSION A) YOU WILL BE LEFT WITH AN EMPTY OPERATORS LIST B) THERE WILL BE ONE SOLITARY OPERAND REMAINING IN THE OPERANDS LIST. THAT LAST OPERAND IS THE RESULT OF THE EVALUATION IF THE ABOVE TWO CONDITIONS ARE NOT TRUE THEN YOUR EXPRESSION WAS BOGUS  

You are free to use any other algorithm that YOU FIGURED AND WROTE. (shunting yard etc.)

DO NOT COPY FROM STACK OVERFLOW.

DO NOT USE ANY PRE-WRITTEN METHOD SUCH AS THE JAVASCRIPT EXPRESSION EVAL ENGINE.

Starter 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.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 } }

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 to Expert-Tailored Solutions

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

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

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

Get Started

Recommended Textbook for

Big Data Fundamentals Concepts, Drivers & Techniques

Authors: Thomas Erl, Wajid Khattak, Paul Buhler

1st Edition

0134291204, 9780134291208

More Books

Students also viewed these Databases questions