Cette source permet d'évaluer une expression booléenne sous la forme : ( ( 2 < 1 ) OU ( 3 >2 ) ) ET ( 1 = 1 )
Source / Exemple :
package fr.julien.pseudocode.metier.structures;
import fr.julien.pseudocode.metier.exception.ExpressionIncorrecteException;
/**
- <b>EvaluateurExpressionBooleenne est un singleton qui permet de définir une méthode d'évaluation des expressions booleennes</b>
-
- @author Julien
- @version 1.0
*
public class EvaluateurExpressionBooleenne {
/**
- Unique instance de la classe EvaluateurExpressionBooleenne
- /
private static final EvaluateurExpressionBooleenne instance = new EvaluateurExpressionBooleenne();
/**
- Constructeur du singleton
- /
private EvaluateurExpressionBooleenne(){
super();
}
/**
- Cette fonction permet d'évaluer une expression booléenne telle que
- <ul>
- <li>2>1</li>
- <li>( ( 2 < 1 ) OU ( 3 >2 ) ) ET ( 1 = 1 )</li>
- </ul>
- @param condition
- La condition à évaluer
- @return la valeur de la condition
- @throws ExpressionIncorrecteException
- Si l'expression entrée est incorrecte
- /
public boolean evaluer(String condition) throws ExpressionIncorrecteException{
String c=condition.replaceAll("\\p{Space}", "");
if(c.contains("(")){
int split=0;
boolean et=true;
int level=0;
for(int i=0; i<c.length();i++){
if(c.charAt(i)=='('){
level++;
}
else if(c.charAt(i)==')'){
level--;
}
if(level==0 && c.substring(i, i+2).equals("ET")){
et=true;
split=i;
break;
}
else if(level==0 && c.substring(i, i+2).equals("OU")){
et=false;
split=i;
break;
}
}
if(et){
return evaluer(c.substring(1, split-1)) && evaluer(c.substring(split+3, c.length()-1));
}
else {
return evaluer(c.substring(1, split-1)) || evaluer(c.substring(split+3, c.length()-1));
}
}
else {
boolean res=false;
if(c.contains("=")){
String[] termes=c.split("=");
res=(termes[0].equals(termes[1]));
}
else if(c.contains("<")){
String[] termes=c.split("<");
res=(Double.parseDouble(termes[0])<Double.parseDouble(termes[1]));
}
else if(c.contains(">")){
String[] termes=c.split(">");
res=(Double.parseDouble(termes[0])>Double.parseDouble(termes[1]));
}
else {
throw new ExpressionIncorrecteException("Condtion incorrecte : " +condition);
}
return res;
}
}
/**
- Accesseur à l'instance de la classe
- @return the instance
- /
public static EvaluateurExpressionBooleenne getInstance() {
return instance;
}
}
package fr.julien.pseudocode.metier.exception;
public class ExpressionIncorrecteException extends Exception {
/**
private static final long serialVersionUID = 860142680101409776L;
/**
public ExpressionIncorrecteException() {
super();
}
/**
- @param message
- @param cause
- /
public ExpressionIncorrecteException(String message, Throwable cause) {
super(message, cause);
}
/**
public ExpressionIncorrecteException(String message) {
super(message);
}
/**
public ExpressionIncorrecteException(Throwable cause) {
super(cause);
}
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.