66import com .expression .parser .ParserManager ;
77import com .expression .parser .exception .CalculatorException ;
88
9- // TODO: Auto-generated Javadoc
109/**
1110 * The Class ComplexFunction.
1211 */
@@ -90,7 +89,7 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
9089 if (character >= '0' && character <= '9' ) {
9190
9291 hasNumber = true ;
93- number = number + character ;
92+ number += character ;
9493 if (i == (f .length () - 1 )) {
9594 value = new Complex (new Double (number ), 0 );
9695 number = "" ;
@@ -103,28 +102,28 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
103102 final Double numb = new Double (number );
104103 final String new_f = f .substring (i + 1 , f .length ());
105104 value = Complex .add (new Complex (numb , 0 ), eval (new_f , values , variables ));
106- i = i + new_f .length ();
105+ i += new_f .length ();
107106 hasNumber = false ;
108107 number = "" ;
109108 } else if (hasNumber && isImaginary ) {
110109 final Double numb = new Double (number );
111110 final String new_f = f .substring (i + 1 , f .length ());
112111 value = Complex .add (new Complex (0 , numb ), eval (new_f , values , variables ));
113- i = i + new_f .length ();
112+ i += new_f .length ();
114113 hasNumber = false ;
115114 isImaginary = false ;
116115 number = "" ;
117116 } else if (hasFunction ) {
118117 final String new_f = f .substring (i + 1 , f .length ());
119118 value = Complex .add (eval (function , values , variables ), eval (new_f , values , variables ));
120- i = i + new_f .length ();
119+ i += new_f .length ();
121120 hasFunction = false ;
122121 function = "" ;
123122
124123 } else {
125124 final String new_f = f .substring (i + 1 , f .length ());
126125 value = Complex .add (value , eval (new_f , values , variables ));
127- i = i + new_f .length ();
126+ i += new_f .length ();
128127 }
129128
130129 } else if (character == '*' ) {
@@ -133,28 +132,28 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
133132 final Double numb = new Double (number );
134133 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
135134 value = Complex .mul (new Complex (numb , 0 ), eval (new_f , values , variables ));
136- i = i + new_f .length ();
135+ i += new_f .length ();
137136 hasNumber = false ;
138137 number = "" ;
139138
140139 } else if (hasNumber && isImaginary ) {
141140 final Double numb = new Double (number );
142141 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
143142 value = Complex .mul (new Complex (0 , numb ), eval (new_f , values , variables ));
144- i = i + new_f .length ();
143+ i += new_f .length ();
145144 hasNumber = false ;
146145 isImaginary = false ;
147146 number = "" ;
148147 } else if (hasFunction ) {
149148 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
150149 value = Complex .mul (eval (function , values , variables ), eval (new_f , values , variables ));
151- i = i + new_f .length ();
150+ i += new_f .length ();
152151 hasFunction = false ;
153152 function = "" ;
154153 } else {
155154 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
156155 value = Complex .mul (value , eval (new_f , values , variables ));
157- i = i + new_f .length ();
156+ i += new_f .length ();
158157 }
159158
160159 } else if (character == '-' ) {
@@ -163,29 +162,29 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
163162 final Double numb = new Double (number );
164163 final String new_f = nextMinusFunction (f .substring (i + 1 , f .length ()));
165164 value = Complex .sub (new Complex (numb , 0 ), eval (new_f , values , variables ));
166- i = i + new_f .length ();
165+ i += new_f .length ();
167166 hasNumber = false ;
168167 number = "" ;
169168 } else if (hasNumber && isImaginary ) {
170169 final Double numb = new Double (number );
171170 final String new_f = nextMinusFunction (f .substring (i + 1 , f .length ()));
172171 value = Complex .sub (new Complex (0 , numb ), eval (new_f , values , variables ));
173- i = i + new_f .length ();
172+ i += new_f .length ();
174173 hasNumber = false ;
175174 isImaginary = false ;
176175 number = "" ;
177176
178177 } else if (hasFunction ) {
179178 final String new_f = nextMinusFunction (f .substring (i + 1 , f .length ()));
180179 value = Complex .sub (eval (function , values , variables ), eval (new_f , values , variables ));
181- i = i + new_f .length ();
180+ i += new_f .length ();
182181 hasFunction = false ;
183182 function = "" ;
184183
185184 } else {
186185 final String new_f = nextMinusFunction (f .substring (i + 1 , f .length ()));
187186 value = Complex .sub (value , eval (new_f , values , variables ));
188- i = i + new_f .length ();
187+ i += new_f .length ();
189188 }
190189
191190 } else if (character == '/' ) {
@@ -194,29 +193,29 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
194193 final Double numb = new Double (number );
195194 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
196195 value = Complex .div (new Complex (numb , 0 ), eval (new_f , values , variables ));
197- i = i + new_f .length ();
196+ i += new_f .length ();
198197 hasNumber = false ;
199198 number = "" ;
200199 } else if (hasNumber && isImaginary ) {
201200 final Double numb = new Double (number );
202201 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
203202 value = Complex .div (new Complex (0 , numb ), eval (new_f , values , variables ));
204- i = i + new_f .length ();
203+ i += new_f .length ();
205204 hasNumber = false ;
206205 isImaginary = false ;
207206 number = "" ;
208207
209208 } else if (hasFunction ) {
210209 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
211210 value = Complex .div (eval (function , values , variables ), eval (new_f , values , variables ));
212- i = i + new_f .length ();
211+ i += new_f .length ();
213212 hasFunction = false ;
214213 function = "" ;
215214
216215 } else {
217216 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
218217 value = Complex .div (value , eval (new_f , values , variables ));
219- i = i + new_f .length ();
218+ i += new_f .length ();
220219 }
221220
222221 } else if (character == '^' ) {
@@ -225,37 +224,37 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
225224 final Double numb = new Double (number );
226225 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
227226 value = Complex .pow (eval (new_f , values , variables ), numb );
228- i = i + new_f .length ();
227+ i += new_f .length ();
229228 hasNumber = false ;
230229 number = "" ;
231230 } else if (hasNumber && isImaginary ) {
232231 final Double numb = new Double (number );
233232 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
234233 value = Complex .pow (eval (new_f , values , variables ), new Complex (0 , numb ));
235- i = i + new_f .length ();
234+ i += new_f .length ();
236235 hasNumber = false ;
237236 isImaginary = false ;
238237 number = "" ;
239238
240239 } else if (hasFunction ) {
241240 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
242241 value = Complex .pow (eval (function , values , variables ), eval (new_f , values , variables ));
243- i = i + new_f .length ();
242+ i += new_f .length ();
244243 hasFunction = false ;
245244 function = "" ;
246245
247246 } else {
248247 final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
249248 value = Complex .pow (value , eval (new_f , values , variables ));
250- i = i + new_f .length ();
249+ i += new_f .length ();
251250 }
252251
253252 } else if (character == '.' ) {
254253 if (i == (f .length () - 1 )) {
255254 throw new CalculatorException ("The function is not well-formed" );
256255 }
257256 if (hasNumber && (number .length () > 0 )) {
258- number = number + character ;
257+ number += character ;
259258 }
260259
261260 } else if (character == '(' ) {
@@ -265,39 +264,39 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
265264
266265 final String new_f = f .substring (i + 1 , nextBracket (f ));
267266 if (hasFunction ) {
268- if (function . equals ( Constants .SIN )) {
267+ if (Constants .SIN . equals ( function )) {
269268 value = eval (new_f , values , variables ).sin ();
270269
271- } else if (function . equals ( Constants .COS )) {
270+ } else if (Constants .COS . equals ( function )) {
272271 value = eval (new_f , values , variables ).cos ();
273272
274- } else if (function . equals ( Constants .TAN )) {
273+ } else if (Constants .TAN . equals ( function )) {
275274 value = eval (new_f , values , variables ).tan ();
276275
277- } else if (function . equals ( Constants .SINH )) {
276+ } else if (Constants .SINH . equals ( function )) {
278277 value = eval (new_f , values , variables ).sinh ();
279278
280- } else if (function . equals ( Constants .COSH )) {
279+ } else if (Constants .COSH . equals ( function )) {
281280 value = eval (new_f , values , variables ).cosh ();
282281
283- } else if (function . equals ( Constants .TANH )) {
282+ } else if (Constants .TANH . equals ( function )) {
284283 value = eval (new_f , values , variables ).tanh ();
285284
286- } else if (function . equals ( Constants .ASIN )) {
285+ } else if (Constants .ASIN . equals ( function )) {
287286 value = eval (new_f , values , variables ).asin ();
288287
289- } else if (function . equals ( Constants .ACOS )) {
288+ } else if (Constants .ACOS . equals ( function )) {
290289 value = eval (new_f , values , variables ).acos ();
291290
292- } else if (function . equals ( Constants .ATAN )) {
291+ } else if (Constants .ATAN . equals ( function )) {
293292 value = eval (new_f , values , variables ).atan ();
294- } else if (function . equals ( Constants .LN )) {
293+ } else if (Constants .LN . equals ( function )) {
295294 value = eval (new_f , values , variables ).log ();
296- } else if (function . equals ( Constants .LOG )) {
295+ } else if (Constants .LOG . equals ( function )) {
297296 value = eval (new_f , values , variables ).log10 ();
298- } else if (function . equals ( Constants .SQRT )) {
297+ } else if (Constants .SQRT . equals ( function )) {
299298 value = eval (new_f , values , variables ).sqrt ();
300- } else if (function . equals ( Constants .CBRT )) {
299+ } else if (Constants .CBRT . equals ( function )) {
301300 value = Complex .cbrt (eval (new_f , values , variables ));
302301 } else {
303302 throw new CalculatorException ("The function is not well-formed" );
@@ -309,7 +308,7 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
309308 } else {
310309 value = eval (new_f , values , variables );
311310 }
312- i = i + new_f .length () + 1 ;
311+ i += new_f .length () + 1 ;
313312
314313 } else if (character == ')' ) {
315314 throw new CalculatorException (" '(' is not finished " );
@@ -334,10 +333,10 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
334333
335334 if (i == (f .length () - 1 )) {
336335
337- if (function . equals ( Constants .E )) {
338- value = new Complex (Math .E , 0 );
339- } else if (function . equals ( Constants .PI )) {
340- value = new Complex (Math .PI , 0 );
336+ if (Constants .E . equals ( function )) {
337+ value = new Complex (StrictMath .E , 0 );
338+ } else if (Constants .PI . equals ( function )) {
339+ value = new Complex (StrictMath .PI , 0 );
341340 } else {
342341 if (function .length () == 1 ) {
343342 final int n = variables .indexOf (function );
@@ -370,9 +369,9 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
370369 if (i == (f .length () - 1 )) {
371370
372371 if (function .equals (Constants .E )) {
373- value = new Complex (Math .E , 0 );
372+ value = new Complex (StrictMath .E , 0 );
374373 } else if (function .equals (Constants .PI )) {
375- value = new Complex (Math .PI , 0 );
374+ value = new Complex (StrictMath .PI , 0 );
376375 } else {
377376 if (function .length () == 1 ) {
378377 final int n = variables .indexOf (function );
@@ -396,11 +395,11 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
396395
397396 if (i == (f .length () - 1 )) {
398397
399- if (function . equals ( Constants .E )) {
400- value = new Complex (Math .E , 0 );
398+ if (Constants .E . equals ( function )) {
399+ value = new Complex (StrictMath .E , 0 );
401400
402- } else if (function . equals ( Constants .PI )) {
403- value = new Complex (Math .PI , 0 );
401+ } else if (Constants .PI . equals ( function )) {
402+ value = new Complex (StrictMath .PI , 0 );
404403 } else {
405404 if (function .length () == 1 ) {
406405 final int n = variables .indexOf (function );
@@ -438,20 +437,18 @@ private String nextFunction(final String f) throws CalculatorException {
438437
439438 if (character == '+' || character == '*' || character == '-' || character == '/' ) {
440439 i = f .length ();
441- } else if (character == '^' ) {
442- result = result + character ;
443- } else if (character == '.' ) {
444- result = result + character ;
440+ } else if (isValidNumericAndCharacter ( character ) ) {
441+ result += character ;
442+ } else if (character == '^' || character == ' .' ) {
443+ result += character ;
445444 } else if (character == '(' ) {
446445 final String new_f = f .substring (i , nextBracket (f ) + 1 );
447- result = result + new_f ;
446+ result += new_f ;
448447 i = (i + new_f .length ()) - 1 ;
449448 } else if (character == ')' ) {
450449 throw new CalculatorException (" '(' is not finished " );
451450 } else if (character == ' ' ) {
452- result = result + character ;
453- } else if (isValidNumericAndCharacter (character )) {
454- result = result + character ;
451+ result += character ;
455452 } else {
456453 throw new CalculatorException ("Invalid character:" + character );
457454 }
@@ -473,28 +470,22 @@ private String nextMinusFunction(final String f) throws CalculatorException {
473470 for (int i = 0 ; i < f .length (); i ++) {
474471 final char character = f .charAt (i );
475472
476- if (character == '+' ) {
477- i = f .length ();
478- } else if (character == '*' ) {
479- result = result + character ;
480- } else if (character == '-' ) {
473+ if (character == '+' || character == '-' ) {
481474 i = f .length ();
482- } else if (character == '/' ) {
483- result = result + character ;
484- } else if (character == '^' ) {
485- result = result + character ;
486- } else if (character == '.' ) {
487- result = result + character ;
475+ } else if (character == '*' || character == ' /' ) {
476+ result += character ;
477+ } else if (isValidNumericAndCharacter ( character ) ) {
478+ result += character ;
479+ } else if (character == '^' || character == ' .' ) {
480+ result += character ;
488481 } else if (character == '(' ) {
489482 final String new_f = f .substring (i , nextBracket (f ) + 1 );
490- result = result + new_f ;
483+ result += new_f ;
491484 i = (i + new_f .length ()) - 1 ;
492485 } else if (character == ')' ) {
493486 throw new CalculatorException (" '(' is not finished " );
494487 } else if (character == ' ' ) {
495- result = result + character ;
496- } else if (isValidNumericAndCharacter (character )) {
497- result = result + character ;
488+ result += character ;
498489 } else {
499490 throw new CalculatorException ("Invalid character:" + character );
500491 }
0 commit comments