52 lines
1.5 KiB
Java
52 lines
1.5 KiB
Java
import java.util.Stack;
|
||
|
||
public class Arithmetique {
|
||
|
||
public static void main(String[] args) {
|
||
|
||
// Exemple : 18 6 1 2 + 9 + / + 8 7 - *
|
||
// String[] args = {"18", "6", "1", "2", "+", "9", "+", "/", "+", "8", "7", "-", "*"};
|
||
|
||
Stack<Integer> pile = new Stack<>();
|
||
|
||
for (String element : args) {
|
||
if (estNombre(element)) {
|
||
// Si c’est un nombre, on le met dans la pile
|
||
pile.push(Integer.parseInt(element));
|
||
} else {
|
||
// Sinon c’est un opérateur on dépile 2 valeurs
|
||
int b = pile.pop();
|
||
int a = pile.pop();
|
||
int resultat = calculer(a, b, element);
|
||
// On empile le résultat
|
||
pile.push(resultat);
|
||
}
|
||
}
|
||
|
||
// À la fin, il reste le résultat final dans la pile
|
||
System.out.println("Résultat = " + pile.pop());
|
||
}
|
||
|
||
// Vérifie si une chaîne est un nombre
|
||
public static boolean estNombre(String s) {
|
||
try {
|
||
Integer.parseInt(s);
|
||
return true;
|
||
} catch (NumberFormatException e) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
// Calcule a (op) b
|
||
public static int calculer(int a, int b, String op) {
|
||
switch (op) {
|
||
case "+": return a + b;
|
||
case "-": return a - b;
|
||
case "*": return a * b;
|
||
case "/": return a / b;
|
||
default:
|
||
throw new IllegalArgumentException("Opérateur inconnu : " + op);
|
||
}
|
||
}
|
||
}
|