Évaluer une expression mathématique en Java

Zeeshan Afridi 12 octobre 2023
É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 Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

Article connexe - Java Math