Java:erreur de stack
domxaline
-
domxaline -
domxaline -
Bonjour,
programme suivant en executant me donne erreur aidez moi svp
erreur est suivant:
Exception in thread "main" java.util.EmptyStackException
at java.util.Stack.peek(Unknown Source)
at java.util.Stack.pop(Unknown Source)
at Autounboxex.main(Autounboxex.java:10)
programme suivant en executant me donne erreur aidez moi svp
import java.util.Stack;
public class Autounboxex
{
public static void main(String[]args)
{
Stack<Integer> MyStack=new Stack<Integer>();
MyStack.push(10);
MyStack.push(20);
int stackSum=MyStack.pop()+MyStack.pop();
System.out.println("The top most element from the stack is :"+MyStack.pop());
System.out.println("The next to top most element from the stack is :"+MyStack.pop());
System.out.println("The sum of two element from the stack is :"+stackSum);
}
}
erreur est suivant:
Exception in thread "main" java.util.EmptyStackException
at java.util.Stack.peek(Unknown Source)
at java.util.Stack.pop(Unknown Source)
at Autounboxex.main(Autounboxex.java:10)
20 réponses
-
Attention. Stack.pop() enlève de la pile donc vu que tu ajoutes 10 puis 20 à ta pile , et que tu les enlèves pour les additionner, quand tu veux afficher ta première phrase, il n'y a plus rien.
-
System.out.println("The top most element from the stack is :"+MyStack.peek());
j'ai erreur suivante
Exception in thread "main" java.util.EmptyStackException
at java.util.Stack.peek(Unknown Source)
at Autounboxex.main(Autounboxex.java:10) -
import java.util.Stack; public class Autounboxex { public static void main(String[]args) { Stack<Integer> MyStack=new Stack<Integer>(); MyStack.push(10);//autobox MyStack.push(20);//autobox //int stackSum=MyStack.pop()+MyStack.pop();//unboxing int stackSum=MyStack.peek()+MyStack.peek(); System.out.println("The top most element from the stack is :"+MyStack.pop()); System.out.println("The next to top most element from the stack is :"+MyStack.pop()); System.out.println("The sum of two element from the stack is :"+stackSum); } }
en écrivant le code comme ça,mon resultat est faux
The top most element from the stack is :20
The next to top most element from the stack is :10
The sum of two element from the stack is :40
au lieu de 30 j'ai 40 est ce normal -
Normal, regardes :
Stack<Integer> MyStack=new Stack<Integer>(); MyStack.push(10); // 1 element dans la pile MyStack.push(20); //2 elements dans la pile int stackSum=MyStack.pop()+MyStack.pop(); // 0 éléments dans la pile System.out.println("The top most element from the stack is :"+MyStack.pop()); //Et la tu veux regarder quoi ??? Y'a plus rien !
Tu as plusieurs solutions :MyStack.push(10); // 1 element dans la pile MyStack.push(20); //2 elements dans la pile int stackSum=MyStack.peek()+MyStack.peek(); // 0 éléments dans la pile System.out.println("The top most element from the stack is :"+MyStack.pop());
Et il te resteras 1 element dans la pile (le 10)
SoitMyStack.push(10); // 1 element dans la pile MyStack.push(20); //2 elements dans la pile int stackSum=MyStack.peek()+MyStack.peek(); // 0 éléments dans la pile System.out.println("The top most element from the stack is :"+MyStack.pop()); MyStack.pop()
Et la la pile est vide.
Sinon je te conseilles d'utiliser les Try... Catch... pour eviter de couper ton programme et juste montrer qu'il y a eu un bug en mettant :System.out.println("Attention la pile est vide"); -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Effectivement 10 + 20 = 30 et non 40.
(Comme quoi rien ne remplacera l'être humain ^^)
Essaies d'initialiser stackSum à 0;
Fait ca :int stackSum=0; stackSum = MyStack.pop(); stackSum += MyStack.pop();
au lieu de ca (on ne sait jamais un jour ca a buggé bêtement pour ca:int stackSum=MyStack.pop()+MyStack.pop();
-
Je suis bete.
J'ai trouvé.
Regardes :Stack<Integer> MyStack=new Stack<Integer>(); MyStack.push(10); MyStack.push(20);// Ordre de la pile 20 puis 10 int stackSum=MyStack.peek()+MyStack.peek();// La tu additionne le sommet avec le sommet ! 20 +20 = 40.
Donc fait ca et tout ira bien :import java.util.Stack; public class Autounboxex { public static void main(String[]args) { Stack<Integer> MyStack=new Stack<Integer>(); MyStack.push(10); MyStack.push(20); int ancienSommet = MyStack.pop(); int stackSum=MyStack.peek()+ ancienSommet; MyStack.push(ancienSommet); System.out.println("The top most element from the stack is :"+MyStack.pop()); System.out.println("The next to top most element from the stack is :"+MyStack.pop()); System.out.println("The sum of two element from the stack is :"+stackSum); System.out.println("Merci Tiouil !!!"); //Attention à la fin de ton programme il n'y a plus rien dans la pile } } -
J'ai remarqué que tu as une autre question en suspend sur ton fameux triangle de chiffres équilatéral.
Je te donne la réponse en java (vu qu'ici c'est aussi un sujet java):int main() { int tailleX = 14, tailleY = tailleX/2; int milieu = tailleX/2; int min, max; int i, j; for(j = 1; j <= (tailleX/2); j++)//Ordonnees { min = milieu - (j-1); max = milieu + (j-1); for(i = 1; i <= tailleX; i++)//Abscisses { if((i>=min) && (i<=max) && ((i%2) == (j%2)))//(i%2) == (j%2) pour que le numéro de colonne soit pair quand j est paire et inversement -> n%2 retourne 0 si paire et 1 sinon System.out.println("j"); else System.out.println(" "); } System.out.println("\n"); } return 0; } -
premier prg ok;merci beaucoup
pour le prg triangle équilatéral marche pas
résultat s'affiche comme suivant:il donne plusieurs lignes espaces
pour afficher l'autres lignes
j
j
j
j
j
j -
Je l'ai codé en c++ et au moment de la migration vers java j'ai fait une bourde :
essaies ca : chez moi ca fonctionne parfaitement :int tailleX = 14, tailleY = tailleX/2; int milieu = tailleX/2; int min, max; int i, j; for(j = 1; j <= (tailleY); j++)//Ordonnees { min = milieu - (j-1); max = milieu + (j-1); for(i = 1; i <= tailleX; i++)//Abscisses { if((i>=min) && (i<=max) && ((i%2) == (j%2)))//(i%2) == (j%2) pour que le numéro de colonne soit pair quand j est paire et inversement -> n%2 retourne 0 si paire et 1 sinon System.out.println(j); else System.out.println(" "); } System.out.println("\n"); } -
public class TrinangleTest { public static void main(String[]args) { int tailleX = 14, tailleY = tailleX/2; int milieu = tailleX/2; int min, max; int i, j; for(j = 1; j <= (tailleY); j++)//Ordonnees { min = milieu - (j-1); max = milieu + (j-1); for(i = 1; i <= tailleX; i++)//Abscisses { if((i>=min) && (i<=max) && ((i%2) == (j%2)))//(i%2) == (j%2) pour que le numéro de colonne soit pair quand j est paire et inversement -> n%2 retourne 0 si paire et 1 sinon System.out.print(j); else System.out.println(" "); } System.out.print("\n"); } } }
resultat est suivant:
1
2
2
3
3
3
4
4
4
4
ainsi de suite -
Fait des println au lieux de print tout court.
Ce qui est drôle c'est qu'en c++ ca fonctionne parfaitement.
Peux-tu le tester en c++ ?
Si tu ne peux pas, enlèves le dernier System.out.println("\n"); -
public class TrinangleTest { public static void main(String[]args) { int tailleX = 14, tailleY = tailleX/2; int milieu = tailleX/2; int min, max; int i, j; for(j = 1; j <= (tailleY); j++)//Ordonnees { min = milieu - (j-1); max = milieu + (j-1); for(i = 1; i <= tailleX; i++)//Abscisses { if((i>=min) && (i<=max) && ((i%2) == (j%2)))//(i%2) == (j%2) pour que le numéro de colonne soit pair quand j est paire et inversement -> n%2 retourne 0 si paire et 1 sinon System.out.print(j); else System.out.print(" "); } //System.out.print("\n"); } } }
resultat est suivant
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7 7
entre les chiffres il y espace 3 ou 4 en appuyant sur valider pour envoyer le message tous regroupent ensembleCe qui est drôle c'est qu'en c++ ca fonctionne parfaitement. Peux-tu le tester en c++ ?
je n'ai jamais essayer ces language -
C'est quand même pas normal : soit il fait 136 retours à la ligne, soit il en fait plus du tout en commentant ou non le
print("\n");
Je ne sais pas si tu as remarqué, mais quand tu ne commentes pas cette fameuse ligne, il fait en sorte d'écrire toujours 14 lignes (1 chiffre et 13 retours à la ligne, 2 chiffres et 12 retours à la ligne, ...)
Ensuite c'est l'inverse que je t'ai demandé, changes tout en"System.out.prinln()"
Et laisses commenté le\n
je pense que ça va fonctionner. -
for(i = 1; i <= tailleX; i++)//Abscisses { if((i>=min) && (i<=max) && ((i%2) == (j%2)))//(i%2) == (j%2) pour que le numéro de colonne soit pair quand j est paire et inversement -> n%2 retourne 0 si paire et 1 sinon System.out.println(j); else System.out.println(" "); } System.out.print("\n");
maintenant résultat suivant
1
2
2
3
3
3
4
4
4
4 -
-
-
<code>
public class TrinangleTest
{
public static void main(String[]args)
{
int tailleX = 14, tailleY = tailleX/2;
int milieu = tailleX/2;
int min, max;
int i, j;
for(j = 1; j <= (tailleY); j++)//Ordonnees
{
min = milieu - (j-1);
max = milieu + (j-1);
for(i = 1; i <= tailleX; i++)//Abscisses
{
if((i>=min) && (i<=max) && ((i%2) == (j%2)))//(i%2) == (j%2) pour que le numéro de colonne soit pair quand j est paire et inversement -> n%2 retourne 0 si paire et 1 sinon
System.out.println(j);
else
System.out.println(" ");
}
//System.out.println("\n");
}
}
} -
-
et ca :
public class TrinangleTest { public static void main(String[]args) { int tailleX = 14, tailleY = tailleX/2; int milieu = tailleX/2; int min, max; int i, j; for(j = 1; j <= (tailleY); j++)//Ordonnees { min = milieu - (j-1); max = milieu + (j-1); for(i = 1; i <= tailleX; i++)//Abscisses { if((i>=min) && (i<=max) && ((i%2) == (j%2)))//(i%2) == (j%2) pour que le numéro de colonne soit pair quand j est paire et inversement -> n%2 retourne 0 si paire et 1 sinon System.out.print(j); else System.out.print(" "); } System.out.println(""); } } } -