Skip to content

Instantly share code, notes, and snippets.

@seysn
Created September 21, 2015 09:46
Show Gist options
  • Save seysn/1fcbebda2f6bc68668ac to your computer and use it in GitHub Desktop.
Save seysn/1fcbebda2f6bc68668ac to your computer and use it in GitHub Desktop.
package calculatrice;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Calculatrice {
public static final char[] list_operators = new char[] {'+', '-', '*', '/'};
private static List<Integer> numbers;
private static Map<Integer, Character> operators;
public static String execute(String input) {
// CAS SPECIAUX
if (input.isEmpty())
return "";
if (input.matches("[0-9]+"))
return input;
input = input.replaceAll("\\s","");
// INITIALISATION
numbers = new ArrayList<>();
operators = new HashMap<Integer, Character>();
// DECOMPOSITION
for (int i = 0; i < input.length(); i++) {
if (isInto(input.toCharArray()[i], list_operators))
operators.put(i, input.toCharArray()[i]);
}
// TESTS
// System.out.println("Les operateurs :");
// for (Object c : operators.values().toArray()) {
// System.out.println(c);
// }
// END TESTS
Integer[] idxOperators = Arrays.copyOf(operators.keySet().toArray(), operators.values().size(), Integer[].class);
// TESTS
// System.out.println("IDX operateurs :");
// for (Integer i : idxOperators) {
// System.out.println(i);
// }
// END TESTS
for (int i = 0; i < idxOperators.length + 1; i++) {
if (i == 0) {
numbers.add(Integer.parseInt(input.substring(0, idxOperators[0])));
} else if (i == idxOperators.length) {
numbers.add(Integer.parseInt(input.substring(idxOperators[idxOperators.length - 1] + 1, input.length())));
} else {
numbers.add(Integer.parseInt(input.substring(idxOperators[i - 1] + 1, idxOperators[i])));
}
}
// TESTS
// System.out.println("Les nombres :");
// for (Integer i : numbers)
// System.out.println(i);
// END TESTS
// CALCUL
Double res = new Double(numbers.get(0));
for (int i = 1; i < numbers.size(); i++) {
switch (operators.get(idxOperators[i - 1])) {
case '+':
res += numbers.get(i);
break;
case '-':
res -= numbers.get(i);
break;
case '*':
res *= numbers.get(i);
break;
case '/':
res /= numbers.get(i);
break;
default:
break;
}
}
if (res.intValue() == res)
return String.valueOf(res.intValue());
// END
return String.valueOf(res);
}
private static boolean isInto(char c, char[] list) {
for (char ch : list) {
if (ch == c)
return true;
}
return false;
}
public static void main(String[] args) {
System.out.println("LE RESULTAT : " + Calculatrice.execute("1/2"));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment