I have the following program, whcih is a calculator, it works brackets too, but
one has to insert a space. Now i did exceptions and i am having an error saying
throwable required. Can anyone help?
Also I would like to add to the program, that when a user enters a letter
instead of a number for example " 22 + a - 3 " , it throws an exception saying
"Only numbers can be inputted!"
Thanking you in advance for any help you give me and also for your time!
import java.io.*;
import java.util.*;
public class fvcalculator {
private static String sEquation ="";
final private static int EXIT_OPTION = -1;
//==============================================================================\
==
// Read user input
//==============================================================================\
==
public static String readText(String message){
BufferedReader input;
String text = "";
try{
System.out.print(message);
input = new BufferedReader(new InputStreamReader(System.in));
text = input.readLine();
}
catch(IOException ioe){
System.out.println("An exception was thrown while reading input from
user.");
}
return text;
}
//==============================================================================\
==
//==============================================================================\
==
// Grouping method - brackets are worked first
//==============================================================================\
==
public static String calc(String input){
int open;
int close;
StringBuffer modifier = new StringBuffer(input);
while((open = input.lastIndexOf("(")) != -1){
close = input.indexOf(")", open);
String subString = input.substring(open + 1, close);
String answer = calculation(parse(subString));
modifier.replace(open, close + 1, answer);
input = modifier.toString();
}
input = calculation(parse(input));
return input;
}
//==============================================================================\
==
//==============================================================================\
==
// Converting equation inputted by user to Vector
//==============================================================================\
==
public static Vector parse(String sEquation){
Vector ParsedsEquation = new Vector ();
String [] temp = sEquation.split ("\\s");
for (int i=0; i<temp.length; i++)
ParsedsEquation.addElement (temp[i]);
return ParsedsEquation;
}
//==============================================================================\
==
//==============================================================================\
==
// Displays answer on the screen
//==============================================================================\
==
public static void printResult(){
System.out.print("\n\nAnswer of " +sEquation + " is: ");
System.out.println(calc(sEquation));
}
//==============================================================================\
==
//==============================================================================\
==
// Array of Operands + Calculation
//==============================================================================\
==
public static String calculation (Vector ParsedsEquation){
char [] operator = {'/','*','+','-'};
for (int i=0; i<operator.length; i++){
while (ParsedsEquation.contains (String.valueOf (operator[i])) !=
false){
int a = ParsedsEquation.indexOf("" +operator[i]);
if (a!=-1){
String answer = computation (""
+ParsedsEquation.get(a-1),operator[i],
"" + ParsedsEquation.get(a+1));
ParsedsEquation.removeElementAt(a-1);
ParsedsEquation.removeElementAt(a-1);
ParsedsEquation.removeElementAt(a-1);
ParsedsEquation.add(a-1, answer);
}
}
}
String result = "";
for (int i=0; i<ParsedsEquation.size();i++)
result = result + ParsedsEquation.elementAt(i);
return result;
}
//==============================================================================\
==
//==============================================================================\
==
// Computation - for operators
//==============================================================================\
==
public static String computation (String a, char op, String b)throws
Calculator Exception{
double firstOperand = 0;
double secondOperand = 0;
try{
firstOperand = Double.parseDouble(a);
}
catch(NumberFormatException nfe){
throw new CalculatorException("The left operand "+a+"cannot be converted into
double");
}
try{
secondOperand = Double.parseDouble (b);
}
catch(NumberFormatException nfe){
throw new CalculatorException("The left operand "+b+"cannot be converted into
double");
}
double result = 0;
switch (op){
case '+':
if (firstOperand/2 + secondOperand/2 >= Double.MAX_VALUE/2)
throw new Calculator Exception("Cannot compute: "+a+" +
"+b+"because of overflow");
else
result = firstOperand + secondOperand;
break;
case '-':
if (firstOperand/2 - secondOperand/2 <= Double.MIN_VALUE/2)
throw new Calculator Exception("Cannot compute: "+a+" -
"+b+"because of overflow");
else
result = firstOperand - secondOperand;
break;
case '*':
if (firstOperand/2 * secondOperand/2 >= Double.MAX_VALUE/2)
throw new Calculator Exception("Cannot compute: "+a+" *
"+b+"because of overflow");
else
result = firstOperand * secondOperand;
break;
case '/':
result = firstOperand / secondOperand;
break;
default:
throw new CalculatorException ("This character'"+op'" is not a
recognized operator!");
}
return String.valueOf(result);
}
//==============================================================================\
==
//==============================================================================\
==
// Main Method - user is asked to enter the mathematical problem using a
space
// between each character inserted. Also the user has the
options
// of continuing using the calculator or exiting the program.
// User has to enter the sEquation using a space. Also
brackets
// must be of the type '(' or ')'
//==============================================================================\
==
public static void main (String args[]){
System.out.println ("*************************");
System.out.println ("\tCALCULATOR ");
System.out.println ("*************************");
sEquation = readText("\nPlease enter the mathematical calculation using
a SPACE:\n ");
printResult();
System.out.println ("-------------------------");
int selectedOption = EXIT_OPTION;
do{
String[] calculatorMenu = {"Continue using the Calculator"};
switch (selectedOption = displayMenu(calculatorMenu, "\t CALCULATOR
MENU")){
case 1:
sEquation = readText("\nPlease enter the mathematical
calculation using a SPACE:\n ");
printResult();
break;
}
}while ( selectedOption!=EXIT_OPTION );
System.out.println("Goodbye...");
}
//==============================================================================\
==
//==============================================================================\
==
// Display Calculator Menu each time the user continues to use the
calculator
//==============================================================================\
==
public static int displayMenu(String[] options, String calculatorMenu){
int selectedOption = EXIT_OPTION;
int selectionSize = options.length;
do{
System.out.println("\n\n\n\n-----------------------------------");
System.out.println(calculatorMenu);
System.out.println("-----------------------------------\n");
for (int i = 0 ; i < selectionSize; i++)
System.out.println((i+1)+"\t"+ options[i]);
System.out.println((selectionSize+1)+"\tExit");
System.out.println("-----------------------------------\n");
try
{
selectedOption = Integer.parseInt(readText("Enter your
selection: "));
}
catch(Exception e){}
}while( !(selectedOption>0 && selectedOption<=selectionSize+1) );
return ((selectedOption==selectionSize+1)?EXIT_OPTION:selectedOption);
}
//==============================================================================\
==
}// end of class