import java.lang.Math;	// wird fuer das berechnen der Wurzel benoetigtclass Op{		private static final char ADD = '+';	private static final char DIV = '/';	private static final char MUL = '*';	private static final char SUB = '-';	private static final char NEG = '±';	private static final char SQR = '\u02C6';	//neu	private static final char ROO = '\u221A';	//neu		private char op;		private Op( char op )		{ this.op = op; }			private char op()		{ return this.op; }			String asString()		{		char[] str = { op }; 		return new String( str );		}				static Op Add()		{ return new Op( ADD ); }			static Op Divide()		{ return new Op( DIV ); }			static Op Multiply()		{ return new Op( MUL ); }			static Op Negate()		{ return new Op( NEG); }			static Op Subtract()		{ return new Op( SUB ); }			static Op Square()				// neu		{ return new Op( SQR ); }	// neu			static Op SquareRoot()			// neu		{ return new Op( ROO ); }	// neu			boolean isAddition()		{ return op() == ADD; }					boolean isDivision()		{ return op() == DIV; }			boolean isMultiplication()		{ return op() == MUL; }		boolean isNegation()		{ return op() == NEG; }					boolean isSubtraction()		{ return op() == SUB; }				boolean isSquare()				// neu		{ return op() == SQR; }		// neu		boolean isSquareRoot()			// neu		{ return op() == ROO; }		// neu			boolean isBinaryOp()		{ return ( ! isUnaryOp() ); }		boolean isUnaryOp() {			// geaendert, da es nun noch weitere unary Operations gibt				if (isNegation() | isSquare() | isSquareRoot()) return true;				else return false; 	}	Double perform( Double a )		{		//"Alte" Funktion fuer den Fall, dass ein Double eingegeben wurde.						double temp = a.doubleValue();		double result = Double.NaN;				if ( isNegation() ) {						 	result = temp * -1d;	//Was bedeutet das d genau?		 }; 				// zusaetzliche Fallunterscheidung fuer Quadrat				if ( isSquare() ) {						 	result = temp * temp;		 }; 		 			// zusaetzliche Fallunterscheidung fuer Wurzel				if ( isSquareRoot() ){								/* Hier wird unterschieden, ob die Eingabe negativ oder positiv ist,			denn das ziehen der Wurzel aus einer negativen Zahl ist in den reellen Zahlen			nicht definiert.			*/						if (temp<0) {	// negativ								String s = new String("Eingabefehler:\n\nDie Wurzel einer negativen Zahl ist in den realen Zahlen nicht definiert.\nBitte geben Sie eine andere Zahl ein, oder wählen Sie eine andere Operation.\n\n");				InfoFrame infoFrame = new InfoFrame(s);				result = temp;			}					else {	//positiv					 		result = Math.sqrt(temp);		 	}		 			 }; 		 			return new Double( result );			}		Double perform( Double a, Double b )		{				double temp1 = a.doubleValue();		double temp2 = b.doubleValue();		double result = Double.NaN;				if ( isAddition() )		 	{ result = temp1 + temp2; }		else if ( isSubtraction() )			{ result = temp1 - temp2; }		else if ( isMultiplication() )			{ result = temp1 * temp2; }		else if ( isDivision() )			{ result = temp1 / temp2; };					return new Double( result );		}			Integer perform( Integer a ) {			/* Neue Funktion fuer den Fall, das ein Integer eingegeben wurde		Dies traegt dazu bei, dass kein ueberfluessiges Kommastellen		ausgegeben werden.				*/						int temp = a.intValue();		int result = 0;				if ( isNegation() ) {						 	result = temp * -1;		 }; 				if ( isSquare() ) {						 	result = temp * temp;		 };		 		return new Integer( result );		}		}		