Évaluer une expression mathématique en Java
L’évaluation d’une expression mathématique à l’aide d’une pile est l’une des options les plus courantes et les plus utiles.
Stack a deux méthodes standard, pop()
et push()
, utilisées pour mettre et obtenir des opérandes ou des opérateurs de la pile. La méthode pop()
supprime l’élément du haut de l’expression, alors que la méthode push()
place un élément en haut de la pile.
Évaluer une expression mathématique en Java
Voici un exemple en Java pour évaluer une expression mathématique. Ce code suit les règles DMAS appropriées avec la priorité suivante : division, multiplication, addition et soustraction.
Vous pouvez lui donner n’importe quelle expression mathématique en entrée, mais assurez-vous que l’expression se compose uniquement des quatre opérations suivantes (addition, multiplication, division et soustraction).
Exemple de code :
package evaluateexpression;
import java.util.Scanner;
import java.util.Stack;
public class EvaluateExpression {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// Creating stacks for operators and operands
Stack<Integer> operator = new Stack();
Stack<Double> value = new Stack();
// Let's create some temparory stacks for operands and operators
Stack<Integer> tmpOp = new Stack();
Stack<Double> tmpVal = new Stack();
// Enter an arthematic expression
System.out.println("Enter expression");
String input = scan.next();
System.out.println(
"The type of the expression is " + ((Object) input).getClass().getSimpleName());
input = "0" + input;
input = input.replaceAll("-", "+-");
// In the respective stacks store the operators and operands
String temp = "";
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
if (ch == '-')
temp = "-" + temp;
else if (ch != '+' && ch != '*' && ch != '/')
temp = temp + ch;
else {
value.push(Double.parseDouble(temp));
operator.push((int) ch);
temp = "";
}
}
value.push(Double.parseDouble(temp));
// Create a character array for the operator precedence
char operators[] = {'/', '*', '+'};
/* Evaluation of expression */
for (int i = 0; i < 3; i++) {
boolean it = false;
while (!operator.isEmpty()) {
int optr = operator.pop();
double v1 = value.pop();
double v2 = value.pop();
if (optr == operators[i]) {
// if operator matches evaluate and store it in the temporary stack
if (i == 0) {
tmpVal.push(v2 / v1);
it = true;
break;
} else if (i == 1) {
tmpVal.push(v2 * v1);
it = true;
break;
} else if (i == 2) {
tmpVal.push(v2 + v1);
it = true;
break;
}
} else {
tmpVal.push(v1);
value.push(v2);
tmpOp.push(optr);
}
}
// pop all the elements from temporary stacks to main stacks
while (!tmpVal.isEmpty()) value.push(tmpVal.pop());
while (!tmpOp.isEmpty()) operator.push(tmpOp.pop());
// Iterate again for the same operator
if (it)
i--;
}
System.out.println("\nResult = " + value.pop());
}
}
Production:
Enter expression
2+7*5-3/2
The type of the expression is String
Result = 35.5
Comme vous pouvez le voir dans la sortie du code ci-dessus, l’expression 2+7*5-3/2
a été donnée en entrée. Et le programme a calculé le résultat comme 35.5
.
Il a d’abord divisé 3/2 = 1.5
car, dans les règles DMAS, la division a la priorité la plus élevée. Ensuite, la partie de multiplication est calculée comme 7*5 = 35
.
Ensuite, nous avons une addition de 2+35 = 37
, et la dernière partie de l’expression est une soustraction qui est 37 -1.5 = 35.5
.
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn