Download | Plain Text | Line Numbers
/*
* Copyright (c) 2008, Manuel Mausz <manuel at mausz.at>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the copyright holders nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
import java.util.Scanner;
/**
* Implements a RPN Calculator
* - Fills calculator with operations
* - Parses the given input syntax
* - passes them to the RPN Calculator
* - and prints the specified (tho completely non-informative) error messages
*
* @version 1.0
* @author Manuel Mausz (manuel at mausz.at)
* @author http://manuel.mausz.at/
*/
class Main
{
public static void main(String args[])
{
Rechner calc = new Rechner();
calc.addOperation(new AddOperation());
calc.addOperation(new SubOperation());
calc.addOperation(new MulOperation());
calc.addOperation(new DivOperation());
calc.addOperation(new PowOperation());
calc.addOperation(new InvOperation());
calc.addOperation(new SinOperation());
calc.addOperation(new CosOperation());
// missing in spec?
//calc.addOperation(new FacOperation());
/* read syntax */
Scanner scan = new Scanner(System.in);
try
{
while(scan.hasNext())
{
/* pass operand or operator to RPNCalculator */
if (scan.hasNextDouble())
calc.enterNumber(scan.nextDouble());
else if (scan.hasNext())
calc.enterOperation(scan.next());
}
/* dump RPN stack */
System.out.println(calc);
}
catch(InvalidParameterException e)
{
System.out.println("?");
}
catch(InvalidOperationException e)
{
System.out.println("FALSCHE EINGABE");
}
scan.close();
}
}