Przeglądaj źródła

Amélioration min et max

Arthur Brandao 6 lat temu
rodzic
commit
d425ea0169
1 zmienionych plików z 24 dodań i 19 usunięć
  1. 24 19
      src/migl/lisp/operator/MinMaxOperator.java

+ 24 - 19
src/migl/lisp/operator/MinMaxOperator.java

@@ -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) {