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();
  }
}