Skip to content

Commit 7310e0c

Browse files
committed
New version 3.2
1 parent 604ebc6 commit 7310e0c

File tree

4 files changed

+216
-246
lines changed

4 files changed

+216
-246
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>com.expression.parser</groupId>
55
<artifactId>com.expression.parser</artifactId>
66
<packaging>jar</packaging>
7-
<version>3.0.0</version>
7+
<version>3.2.0</version>
88
<name>com.expression.parser</name>
99
<description></description>
1010

src/main/java/com/expression/parser/function/ComplexFunction.java

Lines changed: 61 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.expression.parser.ParserManager;
77
import 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

Comments
 (0)