CSCI 151 - Project 1
RPN Calculator


Overview

In this project, you will write a calculator that uses a stack and test it with JUnit.

Materials

Setup

  1. Download the skeleton for this project.
  2. Unpack the code into a new Eclipse Java project.
  3. Copy over the numstack.model class from the 151-stacks project in Lab 3. You will need a working implementation of the Stack interface that has passed all the JUnit tests of Lab 3.

Description

We saw two implementations of the Stack interface. For this project, you will gain familiarity with the use of stack operations to implement a larger class. In particular, we will investigate how to create a mathematical calculator with a slightly different notation of operations.

An expression such as 2 + 3 * 5 is ambiguous by itself, only looking at syntax. To resolve it properly we need to use the order of operations: Multiplication, then Division, then Addition, then Subtraction, or use parenthesis to force our order. (2 + 3) * 5 is different than 2 + (3 * 5).

Alternately, we can use Reverse Polish Notation to embed the precedence in the expression. By placing the operator at the end instead of in the middle of the two operands, we know exactly what operation to perform when. Our ambiguity disappears, since the above expression will need to be written as 2 3 5 * + or 2 3 + 5 * depending on the desired result.

This model of mathematical operators can be implemented with a stack. When the calculator sees an integer, it should be added to the stack. When it sees an operator (*, +, /, -, %), it should pop the two most recent elements from the stack, perform the operation, and then push the result back on the stack.

When the order of the operation matters, such as a - b, then your code should use the first element popped as b and the second element popped as a.

RPNCalc

In the rpn.model package, you will find the following classes:

RPNCalc.java

This is the main file you will have to complete. You will need to make a constructor.

RPNCalcTest.java

These are the unit tests for your calculator. Your grade depends on passing these tests.

Op.java

This is an Enum. It is used in testing with JUnit, and you can safely ignore it.

What to Hand In

Submit your RPNCalc.java file along with any additional files you created.

Grading


© Mark Goadrich, Hendrix College