|
@@ -17,27 +17,32 @@ public class MinMaxOperator implements LispOperator {
|
|
|
//Initialise avec la 1er valeur
|
|
|
LispElement elt = LispElement.getElement(lisp.car());
|
|
|
lisp = lisp.cdr();
|
|
|
- BigInteger res = elt.toInt();
|
|
|
- //Parcours les elements suivants
|
|
|
- while(!lisp.isEmpty()) {
|
|
|
- elt = LispElement.getElement(lisp.car());
|
|
|
- if(elt.value.getClass() != BigInteger.class) break;
|
|
|
- switch(operator) {
|
|
|
- case "max":
|
|
|
- res = res.max(elt.toInt());
|
|
|
- break;
|
|
|
- case "min":
|
|
|
- res = res.min(elt.toInt());
|
|
|
- break;
|
|
|
- default:
|
|
|
- throw new LispError(operator + LispError.ERR_UNKNOW);
|
|
|
+ double result;
|
|
|
+ try {
|
|
|
+ BigInteger res = elt.toInt();
|
|
|
+ //Parcours les elements suivants
|
|
|
+ while(!lisp.isEmpty()) {
|
|
|
+ elt = LispElement.getElement(lisp.car());
|
|
|
+ if(elt.value.getClass() != BigInteger.class) break;
|
|
|
+ switch(operator) {
|
|
|
+ case "max":
|
|
|
+ res = res.max(elt.toInt());
|
|
|
+ break;
|
|
|
+ case "min":
|
|
|
+ res = res.min(elt.toInt());
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new LispError(operator + LispError.ERR_UNKNOW);
|
|
|
+ }
|
|
|
+ lisp = lisp.cdr();
|
|
|
}
|
|
|
- lisp = lisp.cdr();
|
|
|
+ //Si on finit la liste avec que des entier on retourne
|
|
|
+ if(lisp.isEmpty()) return LispElement.generate(res);
|
|
|
+ //Sinon on continue en passant en double
|
|
|
+ result = res.doubleValue();
|
|
|
+ } catch (Exception ex) {
|
|
|
+ result = elt.toNumber();
|
|
|
}
|
|
|
- //Si on finit la liste avec que des entier on retourne
|
|
|
- if(lisp.isEmpty()) return LispElement.generate(res);
|
|
|
- //Sinon on continue en passant en double
|
|
|
- double result = res.doubleValue();
|
|
|
while(!lisp.isEmpty()) {
|
|
|
double value = LispElement.getElement(lisp.car()).toNumber();
|
|
|
switch(operator) {
|