Erreur Java

Fermé
El Talhaoui - 23 mars 2014 à 06:53
 El Talhaoui - 25 mars 2014 à 01:14
Bonjour, j'ai un projet a faire pour mon cours de programmation structure de donnés. Je dois créer un programme qui ou l'on demande a l'utilisateur de rentrer une équation sous la forme infixe et je dois la changer en forme suffixée.

Voici mon programme ... :


public static void main(String[] args) throws Exception {
String expSuffixe;
String expInfix= JOptionPane.showInputDialog("Entrez une expression infixée");

ConvertisseurInfixeEnSuffixe exp= new ConvertisseurInfixeEnSuffixe(expInfix);
expSuffixe= exp.convertirEnSuffixe(expInfix);
System.out.print(expSuffixe);
}


public class ConvertisseurInfixeEnSuffixe {
private Pile PILE;
private String expression = "";
private String Suffixe="";
private int operande= 0;


public ConvertisseurInfixeEnSuffixe(String expression) {
super();
this.expression = expression;
}


public String convertirEnSuffixe(String expression) {

pileGenerique.Pile PILE = new pileGenerique.Pile ();{
PILE.empiler("(");
expression= expression +")";
while (! (PILE.vide())){
for(int i=1;i<=expression.length();i++){

if (estUnEntier(expression.charAt(i))== false){
Suffixe +=Character.toString(expression.charAt(i));

} else if (expression.charAt(i)=='('){
PILE.empiler(expression.charAt(i));
}
else if (estUnOperateur(expression.charAt(i))==true){
Suffixe +=Character.toString(expression.charAt(i));
PILE.empiler(expression.charAt(i));
}
else if (expression.charAt(i)==')'){
while( PILE.voir() != "("){
Suffixe +=(String) PILE.depiler();

}
PILE.depiler();
}

}
}

}
return (String) Suffixe;
}

public boolean estUnOperateur( char operateur){
switch( operateur){
case '+':
return true;

case '-':
return true;

case '*':
return true;
case '/':
return true;
default :
return false;

}

public boolean estUnEntier(char c) {
try {
Character.getNumericValue(c);

} catch (NumberFormatException e){
return false;
}

return true;
}
}
}


Maintenant, le problème c'est que quand je lance le programme, ça me donne cette erreur:

Exception in thread "main" java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.String
at expressionsInfixes.ConvertisseurInfixeEnSuffixe.convertirEnSuffixe(ConvertisseurInfixeEnSuffixe.java:40)
at TestProgramme.main(TestProgramme.java:29)

Quelqu'un peut m'aider ? Merci!
A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
23 mars 2014 à 09:22
Vu qu'on a pas tout ton code on ne peux pas tester, et comme on n'a pas non plus les numéros de lignes pour savoir à quoi correspond les lignes 29 et 40, c'est dur de retrouver l'erreur, d'autant que je doute que ce soit la seule.

En particulier quelles données manipules PILE ?
Si tu fais
(String) PILE.depiler()
il faut être sûr que c'est bien un String qui t'es renvoyé, si c'est un char, tu auras l'erreur décrite : Character cannot be cast to String

En tout cas tu auras un problème sur
while (PILE.voir() != "(")
car il ne faut jamais comparer un String avec == ou != mais avec la méthode equals.
1
El talhaoui
23 mars 2014 à 22:03
D'accord merci pour le equals, je vais essayer ca. Si ca ne fonctionne toujours pas je vais poster tout mon code. Merci
0
El Talhaoui
24 mars 2014 à 00:19
Bon, pour le equals ça fonctionne, maintenant j'ai d'autres erreurs...
voici ma classe Pile

package pileGenerique;

public class Pile<E> {
private int maxElements=1000;
private E elements[];
private int sommet;

public Pile() {
elements = (E[ ]) new Object[maxElements];
sommet = -1;
}

public void empiler(E nouvElem) {
if (sommet == (maxElements-1)) {
System.out.println("Desole, la pile est pleine!");
} else {
//on empile l'élément
sommet = sommet + 1;
elements[sommet] = nouvElem;
}
}

public E depiler() {
if (sommet < 0) {
System.out.println("Errreur: la pile est vide, on ne peut pas depiler!");
return (E) null;
} else {
E elemDuHaut = (E) elements[sommet];
sommet = sommet - 1;
return elemDuHaut;
}
}

public boolean vide(){
return sommet==-1;
}


public E voir(){
return(E) elements[sommet];
}



public String sommet(){
E elemDuHaut = elements[sommet];
sommet = sommet - 1;
return (String) (elemDuHaut);
}



}



Maintenant , j'ai cette erreur:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 4
at java.lang.String.charAt(Unknown Source)
at expressionsInfixes.ConvertisseurInfixeEnSuffixe.convertirEnSuffixe(ConvertisseurInfixeEnSuffixe.java:28)
at TestProgramme.main(TestProgramme.java:28)

La ligne 28 dans TestProgramme c'Est :

expSuffixe= exp.convertirEnSuffixe(expInfix);

et la ligne 28 dans ConvertisseurInfixeEnSuffixe c'est :

if (estOperande(expression.charAt(i))){
Suffixe +=Character.toString(expression.charAt(i));

Je n'ai aucune erreur dans le code, c'Est juste quand je le lance que ça me donne ces erreurs. Pour les anciennes erreurs, la ligne 40 c'était
while (PILE.voir() != "(")


Merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
24 mars 2014 à 07:29
Vu que tu as défini une Pile<E> je commencerais déjà par déclarer
pileGenerique.Pile<String> PILE = new pileGenerique.Pile<String> ();
afin de spécifier que c'est bien des String que tu manipules ce qui évites d'avoir à faire tes casts
(String)
un peu partout dans ton code...

Sinon pour ton erreur c'est parce que tu as fait
for(int i=1;i<=expression.length();i++)
or les indices en Java commence à 0, il faut faire
for(int i=0;i<expression.length();i++)
sinon tu vas avoir des StringIndexOutOfBoundsException lorsque i=expression.length()
0
El Talhaoui
25 mars 2014 à 01:14
D'accord merci, je vais tester ça !
0