## Solution for

Programming Exercise 3.3

THIS PAGE DISCUSSES ONE POSSIBLE SOLUTION to the following exercise from this on-line Java textbook.

Exercise 3.3:Write a program that will evaluate simple expressions such as 17 + 3 and 3.14159 * 4.7. The expressions are to be typed in by the user. The input always consist of a number, followed by an operator, followed by another number. The operators that are allowed are +, -, *, and /. You can read the numbers withTextIO.getDouble()and the operator withTextIO.getChar(). Your program should read an expression, print its value, read another expression, print its value, and so on. The program should end when the user enters 0 as the first number on the line.

Discussion

We need a loop to read and evaluate expressions. It's easiest to use a

breakstatement to end the loop at the appropriate time:Repeat indefinitely: Get the user's input. if the first number is 0: Break out of the loop Find the value of the expression Display the value.Getting the user's input involves reading three data values. We need three variables to store these values. It's best to test whether the first number is 0 right after we read it, so the user will just have to type a 0 to end the program, not a complete expression such as 0 + 0. "Repeat indefinitely" can be written as "

while (true)":while (true): Let firstNum = TextIO.getDouble() if firstNum is 0: Break out of the loop Let operator = TextIO.getChar() Let secondNum = TextIO.getlnDouble() Find the value of the expression Display the value.To evaluate the user's expression, we have to test the

operatorto find out which operation to compute. We can do this with either a multi-wayifstatement or with aswitchstatement. In the program below, I use aswitch. Theifstatement would be:if ( operator == '+' ) value = firstNum + secondNum; else if ( operator == '-' ) value = firstNum - secondNum; else if ( operator == '*' ) value = firstNum * secondNum; else if ( operator == '/' ) value = firstNum / secondNum; else { TextIO.putln("Unknown operator: " + operator); continue; // back to start of loop }The computer won't let you get away without the

elsepart of theifstatement or thedefaultcase in theswitch, since that would leave a possibility that the variable,value, is not assigned a value before it is printed out.This program could be improved by having it print out an error message if the user tries to divide by zero.

The Solution

public class SimpleCalculator { /* This program evaluates simple expressions such as 2 + 2 and 34.2 * 7.81, consisting of a number, an operator, and another number. The operators +, -, *, / are allowed. The program will read and evaluate expressions until the user inputs a line that starts with the number 0. */ public static void main(String[] args) { double firstNum; // First number in the expression. double secondNum; // Second number in the expression. char operator; // The operator in the expression. double value; // The value of the expression. TextIO.putln("Enter expressions such as 2 + 2 or 34.2 * 7.81"); TextIO.putln("using any of the operators +, -, *, /."); TextIO.putln("To end, enter a 0."); TextIO.putln(); while (true) { /* Get user's input, ending program if first number is 0. */ TextIO.put("? "); firstNum = TextIO.getDouble(); if (firstNum == 0) break; operator = TextIO.getChar(); secondNum = TextIO.getlnDouble(); /* Compute the value of the expression. */ switch (operator) { case '+': value = firstNum + secondNum; break; case '-': value = firstNum - secondNum; break; case '*': value = firstNum * secondNum; break; case '/': value = firstNum / secondNum; break; default: TextIO.putln("Unknown operator: " + operator); continue; // Back to start of loop! } // end switch /* Display the value. */ TextIO.putln("Value is " + value); TextIO.putln(); } // end while TextIO.putln("Good bye"); } // end main() } // end class

[ Exercises | Chapter Index | Main Index ]