en faite je suis en train de programmé un convertisseur de notation normal en notation polonaise inversé.
A la ligne X j'aimerais prendre en compte la priorité des opérateurs mais je ne sais pas comment m'y prendre, en créant différent niveau mais comment ???
import java.util.*;
import javax.swing.*;
/**
* Décrivez votre classe Operatorus ici.
*
* @author (Mateus)
* @version (15/11/10 // 15h26)
*/
public class Operatorus
{
ArrayList tokens;//Initialisation de la classe Arraylist
private static final String chiffre = "0123456789.";
private static final String delimitateur = "()";
private static final String operateur = "+-*/";
public Operatorus(String calcul)
{
int taille = calcul.length();
tokens = new ArrayList();// on crée l'ArrayList appellé Tokens
for(int i=0;i<taille;i++)
{
if (operateur.indexOf(calcul.charAt(i))>=0 || delimitateur.indexOf(calcul.charAt(i))>=0)
{
tokens.add(calcul.charAt(i));
}
else if (chiffre.indexOf(calcul.charAt(i))>=0)
{
String s = "";
while(i<calcul.length() && chiffre.indexOf(calcul.charAt(i))>=0)// le 'i' doit etre plus petit que la taille car on met un i++ à la fin.
{
s = s + calcul.charAt(i);
i++;// passe au caractère suivant
}
tokens.add(new Double(Double.parseDouble(s)));
i--;//Car on est déjà au caract suivant !
}
}
}
public void convertorus()
{
String s = "";
Pile p = new Pile();
for(int i=0;i<tokens.size();i++)
{
if(tokens.get(i) instanceof Double)
{
String t = tokens.get(i).toString();
s = s + t + " ";
}
else if(tokens.get(i) == "(" )
{
p.empiler(tokens.get(i));
}
do{
if(p.haut == null)
{
p.empiler(tokens.get(i));
}
else if(p.haut == "(")
{
p.empiler(tokens.get(i));
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
else if(p.haut == ")")
{
while(p.haut =! "(")
{
p.depiler(tokens.get(i));
i++;
}
i--;
}
}while(tokens.get(i) instanceof operateur);
}
System.out.println(s);
}
}