Erreur Java
El Talhaoui
-
El Talhaoui -
El Talhaoui -
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!
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:
- Erreur Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
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
En tout cas tu auras un problème sur
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.
El talhaoui
D'accord merci pour le equals, je vais essayer ca. Si ca ne fonctionne toujours pas je vais poster tout mon code. Merci
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
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
Vu que tu as défini une Pile<E> je commencerais déjà par déclarer
Sinon pour ton erreur c'est parce que tu as fait
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()