Description
Task: Make a calculator application that works with binary numbers!
Deliverables: You must submit all of the following source files for credit:
1. BinaryCalculator.java
2. CalculatorScreenPanel.java
3. HW6Driver.java
If you write any additional classes for the assignment, include them. If a source file you submit
does not compile, you will receive no credit for that file (so make sure to practice safe submission).
Prior to starting this homework, we recommend you read up on binary (base 2) numbers. If you need
help, be sure to ask questions on Piazza!
HW6Driver.java:
This is just a driver class. It contains a main method that generates your GUI. It should create a JFrame,
and add a CalculatorScreenPanel to it. Be sure you set up your frame’s default close operation properly.
CalculatorScreenPanel.java:
This class represents the user interface for a calculator. It must have the following features:
• A display for the number being inputted and for the output of the operation. (This could be a
label or a drawing)
• You will have 8 buttons on your calculator face, arranged in a (4 x 2) grid as shown above. The
operations work just as you’d expect. First, the user inputs a string of 1’s and 0’s. Then, the user
selects what operation to perform. Finally, the user inputs another string, presses “=”, and the
result of the operation is displayed on-screen. If the user begins typing again, the screen is
cleared and the process begins anew. If the user presses “=” when no operation has been
selected yet, then nothing happens.
◦ 1 : A “1” input (add a 1 to the end of the current input)
◦ 0 : A “0” input (add a 0 to the end of the current input)
◦ + : Addition (add the next input to the current)
◦ – : Subtraction (subtract the next input from the current)
◦ * : Multiplication (multiply the current input by the next input)
◦ / : Division (divide the current input by the next input)
◦ = : Equals (signals the last input of an operation is complete, displays result)
◦ CA : Clears the current input
• How you handle the controller logic is up to you. It would be helpful to think about the kind of
states your calculator can be in (such as waiting for input, etc), and think of ways to keep track
of which state your calculator is currently in. The calculator must be able to work properly
when the user keeps adding operations. For example, the sequence:
◦ “0101 + 0111 * 010 – 110 =” should result in 10010 being displayed. Remember, the user is
inputting these operations one at a time. It should work just like a normal calculator. This
seems daunting at first, but here’s a big hint: if the user requests a new operation, try to store
the results of the operation you just finished, and use it as the first input of the next
operation.
Example GUI:
Our calculator starts off with a blank input field.
Pressing various combinations of zeros and ones sets bits in the first input string.
Pressing the desired operator clears the display and allows us to put in the second input string. In this
case we’re multiplying 10 by 4.
Upon pressing equals, the output of the desired operation is displayed.
BinaryCalculator.java:
This class represents a binary calculator (the brains of your calculator application). It takes in input as
unsigned 31-bit binary numbers (this means that you won’t have to worry about negative numbers). It
must have the following features:
• It should be able to handle at least addition, subtraction, multiplication and division. Each
operation it can perform should be available as a static method in the class that takes in two
Strings (the two inputs as unsigned binary strings), and returns a String (the result, in binary).
Remember that binary numbers are just sums of powers of two, where the power is the index of the bit
that is turned on (the zero index is on the right). For example:
10010 = 2^4 + 2^1 = 18
01101 = 2^3 + 2^2 + 2^0 = 13
One strategy for handling the operations is to convert the binary numbers into decimal ints and perform
standard math on them. If you choose to do this, keep in mind that you will not receive credit for using
Integer.parseInt(String, 2) to convert the binary strings to integers (you’ll have to do it yourself). You
are allowed to use Math.pow(int, int). To convert integers to binary strings (if you choose to do it this
way), you are allowed to use Integer.toBinaryString(int).
Additionally: Proper encapsulation and documentation are required. Use class and method javadocs
with the appropriate tags.
Extra Credit:
We are offering three possible extra credits here. You may only choose 2. Please remember to mention
which ones you have done in your javadocs!
• (+5) Use a JTabbedPane to switch between views of the of the output as either binary, decimal,
or hex.
• (+5) If invalid input is given to the calculator, a dialog box should appear saying so, for
example in the case of division by zero or of a syntactic error.
• (+5) Implement these 4 bit-wise operations: AND, OR, NOT, XOR. There must be a
corresponding button in the GUI for each one. [info]