6
6
import com .expression .parser .ParserManager ;
7
7
import com .expression .parser .exception .CalculatorException ;
8
8
9
- // TODO: Auto-generated Javadoc
10
9
/**
11
10
* The Class ComplexFunction.
12
11
*/
@@ -90,7 +89,7 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
90
89
if (character >= '0' && character <= '9' ) {
91
90
92
91
hasNumber = true ;
93
- number = number + character ;
92
+ number += character ;
94
93
if (i == (f .length () - 1 )) {
95
94
value = new Complex (new Double (number ), 0 );
96
95
number = "" ;
@@ -103,28 +102,28 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
103
102
final Double numb = new Double (number );
104
103
final String new_f = f .substring (i + 1 , f .length ());
105
104
value = Complex .add (new Complex (numb , 0 ), eval (new_f , values , variables ));
106
- i = i + new_f .length ();
105
+ i += new_f .length ();
107
106
hasNumber = false ;
108
107
number = "" ;
109
108
} else if (hasNumber && isImaginary ) {
110
109
final Double numb = new Double (number );
111
110
final String new_f = f .substring (i + 1 , f .length ());
112
111
value = Complex .add (new Complex (0 , numb ), eval (new_f , values , variables ));
113
- i = i + new_f .length ();
112
+ i += new_f .length ();
114
113
hasNumber = false ;
115
114
isImaginary = false ;
116
115
number = "" ;
117
116
} else if (hasFunction ) {
118
117
final String new_f = f .substring (i + 1 , f .length ());
119
118
value = Complex .add (eval (function , values , variables ), eval (new_f , values , variables ));
120
- i = i + new_f .length ();
119
+ i += new_f .length ();
121
120
hasFunction = false ;
122
121
function = "" ;
123
122
124
123
} else {
125
124
final String new_f = f .substring (i + 1 , f .length ());
126
125
value = Complex .add (value , eval (new_f , values , variables ));
127
- i = i + new_f .length ();
126
+ i += new_f .length ();
128
127
}
129
128
130
129
} else if (character == '*' ) {
@@ -133,28 +132,28 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
133
132
final Double numb = new Double (number );
134
133
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
135
134
value = Complex .mul (new Complex (numb , 0 ), eval (new_f , values , variables ));
136
- i = i + new_f .length ();
135
+ i += new_f .length ();
137
136
hasNumber = false ;
138
137
number = "" ;
139
138
140
139
} else if (hasNumber && isImaginary ) {
141
140
final Double numb = new Double (number );
142
141
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
143
142
value = Complex .mul (new Complex (0 , numb ), eval (new_f , values , variables ));
144
- i = i + new_f .length ();
143
+ i += new_f .length ();
145
144
hasNumber = false ;
146
145
isImaginary = false ;
147
146
number = "" ;
148
147
} else if (hasFunction ) {
149
148
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
150
149
value = Complex .mul (eval (function , values , variables ), eval (new_f , values , variables ));
151
- i = i + new_f .length ();
150
+ i += new_f .length ();
152
151
hasFunction = false ;
153
152
function = "" ;
154
153
} else {
155
154
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
156
155
value = Complex .mul (value , eval (new_f , values , variables ));
157
- i = i + new_f .length ();
156
+ i += new_f .length ();
158
157
}
159
158
160
159
} else if (character == '-' ) {
@@ -163,29 +162,29 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
163
162
final Double numb = new Double (number );
164
163
final String new_f = nextMinusFunction (f .substring (i + 1 , f .length ()));
165
164
value = Complex .sub (new Complex (numb , 0 ), eval (new_f , values , variables ));
166
- i = i + new_f .length ();
165
+ i += new_f .length ();
167
166
hasNumber = false ;
168
167
number = "" ;
169
168
} else if (hasNumber && isImaginary ) {
170
169
final Double numb = new Double (number );
171
170
final String new_f = nextMinusFunction (f .substring (i + 1 , f .length ()));
172
171
value = Complex .sub (new Complex (0 , numb ), eval (new_f , values , variables ));
173
- i = i + new_f .length ();
172
+ i += new_f .length ();
174
173
hasNumber = false ;
175
174
isImaginary = false ;
176
175
number = "" ;
177
176
178
177
} else if (hasFunction ) {
179
178
final String new_f = nextMinusFunction (f .substring (i + 1 , f .length ()));
180
179
value = Complex .sub (eval (function , values , variables ), eval (new_f , values , variables ));
181
- i = i + new_f .length ();
180
+ i += new_f .length ();
182
181
hasFunction = false ;
183
182
function = "" ;
184
183
185
184
} else {
186
185
final String new_f = nextMinusFunction (f .substring (i + 1 , f .length ()));
187
186
value = Complex .sub (value , eval (new_f , values , variables ));
188
- i = i + new_f .length ();
187
+ i += new_f .length ();
189
188
}
190
189
191
190
} else if (character == '/' ) {
@@ -194,29 +193,29 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
194
193
final Double numb = new Double (number );
195
194
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
196
195
value = Complex .div (new Complex (numb , 0 ), eval (new_f , values , variables ));
197
- i = i + new_f .length ();
196
+ i += new_f .length ();
198
197
hasNumber = false ;
199
198
number = "" ;
200
199
} else if (hasNumber && isImaginary ) {
201
200
final Double numb = new Double (number );
202
201
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
203
202
value = Complex .div (new Complex (0 , numb ), eval (new_f , values , variables ));
204
- i = i + new_f .length ();
203
+ i += new_f .length ();
205
204
hasNumber = false ;
206
205
isImaginary = false ;
207
206
number = "" ;
208
207
209
208
} else if (hasFunction ) {
210
209
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
211
210
value = Complex .div (eval (function , values , variables ), eval (new_f , values , variables ));
212
- i = i + new_f .length ();
211
+ i += new_f .length ();
213
212
hasFunction = false ;
214
213
function = "" ;
215
214
216
215
} else {
217
216
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
218
217
value = Complex .div (value , eval (new_f , values , variables ));
219
- i = i + new_f .length ();
218
+ i += new_f .length ();
220
219
}
221
220
222
221
} else if (character == '^' ) {
@@ -225,37 +224,37 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
225
224
final Double numb = new Double (number );
226
225
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
227
226
value = Complex .pow (eval (new_f , values , variables ), numb );
228
- i = i + new_f .length ();
227
+ i += new_f .length ();
229
228
hasNumber = false ;
230
229
number = "" ;
231
230
} else if (hasNumber && isImaginary ) {
232
231
final Double numb = new Double (number );
233
232
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
234
233
value = Complex .pow (eval (new_f , values , variables ), new Complex (0 , numb ));
235
- i = i + new_f .length ();
234
+ i += new_f .length ();
236
235
hasNumber = false ;
237
236
isImaginary = false ;
238
237
number = "" ;
239
238
240
239
} else if (hasFunction ) {
241
240
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
242
241
value = Complex .pow (eval (function , values , variables ), eval (new_f , values , variables ));
243
- i = i + new_f .length ();
242
+ i += new_f .length ();
244
243
hasFunction = false ;
245
244
function = "" ;
246
245
247
246
} else {
248
247
final String new_f = nextFunction (f .substring (i + 1 , f .length ()));
249
248
value = Complex .pow (value , eval (new_f , values , variables ));
250
- i = i + new_f .length ();
249
+ i += new_f .length ();
251
250
}
252
251
253
252
} else if (character == '.' ) {
254
253
if (i == (f .length () - 1 )) {
255
254
throw new CalculatorException ("The function is not well-formed" );
256
255
}
257
256
if (hasNumber && (number .length () > 0 )) {
258
- number = number + character ;
257
+ number += character ;
259
258
}
260
259
261
260
} else if (character == '(' ) {
@@ -265,39 +264,39 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
265
264
266
265
final String new_f = f .substring (i + 1 , nextBracket (f ));
267
266
if (hasFunction ) {
268
- if (function . equals ( Constants .SIN )) {
267
+ if (Constants .SIN . equals ( function )) {
269
268
value = eval (new_f , values , variables ).sin ();
270
269
271
- } else if (function . equals ( Constants .COS )) {
270
+ } else if (Constants .COS . equals ( function )) {
272
271
value = eval (new_f , values , variables ).cos ();
273
272
274
- } else if (function . equals ( Constants .TAN )) {
273
+ } else if (Constants .TAN . equals ( function )) {
275
274
value = eval (new_f , values , variables ).tan ();
276
275
277
- } else if (function . equals ( Constants .SINH )) {
276
+ } else if (Constants .SINH . equals ( function )) {
278
277
value = eval (new_f , values , variables ).sinh ();
279
278
280
- } else if (function . equals ( Constants .COSH )) {
279
+ } else if (Constants .COSH . equals ( function )) {
281
280
value = eval (new_f , values , variables ).cosh ();
282
281
283
- } else if (function . equals ( Constants .TANH )) {
282
+ } else if (Constants .TANH . equals ( function )) {
284
283
value = eval (new_f , values , variables ).tanh ();
285
284
286
- } else if (function . equals ( Constants .ASIN )) {
285
+ } else if (Constants .ASIN . equals ( function )) {
287
286
value = eval (new_f , values , variables ).asin ();
288
287
289
- } else if (function . equals ( Constants .ACOS )) {
288
+ } else if (Constants .ACOS . equals ( function )) {
290
289
value = eval (new_f , values , variables ).acos ();
291
290
292
- } else if (function . equals ( Constants .ATAN )) {
291
+ } else if (Constants .ATAN . equals ( function )) {
293
292
value = eval (new_f , values , variables ).atan ();
294
- } else if (function . equals ( Constants .LN )) {
293
+ } else if (Constants .LN . equals ( function )) {
295
294
value = eval (new_f , values , variables ).log ();
296
- } else if (function . equals ( Constants .LOG )) {
295
+ } else if (Constants .LOG . equals ( function )) {
297
296
value = eval (new_f , values , variables ).log10 ();
298
- } else if (function . equals ( Constants .SQRT )) {
297
+ } else if (Constants .SQRT . equals ( function )) {
299
298
value = eval (new_f , values , variables ).sqrt ();
300
- } else if (function . equals ( Constants .CBRT )) {
299
+ } else if (Constants .CBRT . equals ( function )) {
301
300
value = Complex .cbrt (eval (new_f , values , variables ));
302
301
} else {
303
302
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
309
308
} else {
310
309
value = eval (new_f , values , variables );
311
310
}
312
- i = i + new_f .length () + 1 ;
311
+ i += new_f .length () + 1 ;
313
312
314
313
} else if (character == ')' ) {
315
314
throw new CalculatorException (" '(' is not finished " );
@@ -334,10 +333,10 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
334
333
335
334
if (i == (f .length () - 1 )) {
336
335
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 );
341
340
} else {
342
341
if (function .length () == 1 ) {
343
342
final int n = variables .indexOf (function );
@@ -370,9 +369,9 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
370
369
if (i == (f .length () - 1 )) {
371
370
372
371
if (function .equals (Constants .E )) {
373
- value = new Complex (Math .E , 0 );
372
+ value = new Complex (StrictMath .E , 0 );
374
373
} else if (function .equals (Constants .PI )) {
375
- value = new Complex (Math .PI , 0 );
374
+ value = new Complex (StrictMath .PI , 0 );
376
375
} else {
377
376
if (function .length () == 1 ) {
378
377
final int n = variables .indexOf (function );
@@ -396,11 +395,11 @@ private Complex eval(final String f, final List<Complex> values, final List<Stri
396
395
397
396
if (i == (f .length () - 1 )) {
398
397
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 );
401
400
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 );
404
403
} else {
405
404
if (function .length () == 1 ) {
406
405
final int n = variables .indexOf (function );
@@ -438,20 +437,18 @@ private String nextFunction(final String f) throws CalculatorException {
438
437
439
438
if (character == '+' || character == '*' || character == '-' || character == '/' ) {
440
439
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 ;
445
444
} else if (character == '(' ) {
446
445
final String new_f = f .substring (i , nextBracket (f ) + 1 );
447
- result = result + new_f ;
446
+ result += new_f ;
448
447
i = (i + new_f .length ()) - 1 ;
449
448
} else if (character == ')' ) {
450
449
throw new CalculatorException (" '(' is not finished " );
451
450
} else if (character == ' ' ) {
452
- result = result + character ;
453
- } else if (isValidNumericAndCharacter (character )) {
454
- result = result + character ;
451
+ result += character ;
455
452
} else {
456
453
throw new CalculatorException ("Invalid character:" + character );
457
454
}
@@ -473,28 +470,22 @@ private String nextMinusFunction(final String f) throws CalculatorException {
473
470
for (int i = 0 ; i < f .length (); i ++) {
474
471
final char character = f .charAt (i );
475
472
476
- if (character == '+' ) {
477
- i = f .length ();
478
- } else if (character == '*' ) {
479
- result = result + character ;
480
- } else if (character == '-' ) {
473
+ if (character == '+' || character == '-' ) {
481
474
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 ;
488
481
} else if (character == '(' ) {
489
482
final String new_f = f .substring (i , nextBracket (f ) + 1 );
490
- result = result + new_f ;
483
+ result += new_f ;
491
484
i = (i + new_f .length ()) - 1 ;
492
485
} else if (character == ')' ) {
493
486
throw new CalculatorException (" '(' is not finished " );
494
487
} else if (character == ' ' ) {
495
- result = result + character ;
496
- } else if (isValidNumericAndCharacter (character )) {
497
- result = result + character ;
488
+ result += character ;
498
489
} else {
499
490
throw new CalculatorException ("Invalid character:" + character );
500
491
}
0 commit comments