CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[JAVA]Problème pile LIFO

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 13:25:15

Bonjour,

J'ai crée une classe pile comme celle ci en java :

PileP4(int top){
this.nb = 0;
this.p = new int[top];
}

public int empile(int a,int b,int nb){
p[nb] = a;
nb++;
p[nb] = b;
nb++;

//Donne la variable top pour dépiler
return nb;
}

public int depile(int top,int p[]){
int b;

b = p[top];
top = top-1;
//On doit utiliser 2 fois la fonction dépile pour avoir la dernière position
//1ère utilisation : x,2ème utilisation : y
if(top-1 < 0){
return -1;
}
return b;
}

Dont je fais une nouvelle instance :

PileP4 MouvementsIA = new PileP4(100);

Bon,jusque la,tout se passe bien.

Mais ensuite,si j'essaye d'empiler des valeurs comme ceci :

empileValue = 0;
empileValue = MouvementsIA.empile(b, a, empileValue);

Il m'affiche une erreur de sortie de limite :(

Si quelqu'un peut m'expliquer.... :(

Merci d'avoir lu,en tout cas.

Bunyan
Bunyan
Niveau 17
15 avril 2012 à 13:32:32

J'imagine que c'est un exercice, car si c'est un besoin réel, tu as la classe Stack qui existe.
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Stack.html

Ps : convention Java :
-UpperCamelCase : tout attachés, ça commence par une majuscule et une majuscule à chaque nouveau mot
-lowerCamelCase : tout attachés, ça commence par une minuscule et une majuscule à chaque nouveau mot.

041
041
Niveau 10
15 avril 2012 à 13:45:04

Ton truc affiche pas "d'erreur de sortie de limite", mais c'est juste que ça marche pas, depile renvoie 0.

Puis c'est une mauvaise approche dans l'implémentation d'une pile en java.

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 14:12:07

041 :d) Pourtant ca marche correctement avec une autre instance :(
Alors c'est quoi la bonne implémentation d'une pile? :question:

041
041
Niveau 10
15 avril 2012 à 14:17:22

http://www.jeggu.com/2010/04/implementation-of-stack-in-java-java.html

Sinon moi je fais ça:
http://pastebin.com/WMZ4Fpku

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 14:23:24

http://pastebin.com/WMZ4Fpku
C'est une LinkedStack ca,non? :question:

041
041
Niveau 10
15 avril 2012 à 14:37:24

Oui

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 14:43:46

Je crois que j'ai pas très bien compris comment on utilise la classe Stack...
On est censé la déclarer en créant une nouvelle classe,ou directement en l'instanciant? :question:

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 14:47:23

En fait j'ai trouvé :rouge:
Stack<String> pile = new Stack(); // pile de chaînes
Mais je peux pas faire Stack<int> pile = new Stack(); ,c'est normal? :question:

041
041
Niveau 10
15 avril 2012 à 14:54:33

Oui, il faut un Object, int c'est un type de base.

Il suffit de passer par la classe Integer pour encapsuler tes int

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 14:58:43

En gros je fais Integer value = 5;?
C'est normal que je puisse pas accéder aux méthodes de la classe Stack en faisant pile.<méthode>?Faut les redefinir? :(

Merci pour les réponses,sinon :merci:

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 15:01:59
  • Integer value = new Integer(5);
041
041
Niveau 10
15 avril 2012 à 15:07:25

En général c'est pas nécessaire, tu peux directement faire ça:
http://pastebin.com/8deg5mju

041
041
Niveau 10
15 avril 2012 à 15:11:42

Toutes les conversions se font implicitement, tu peux faire
int val=st1.pop();

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 15:19:44

Les méthodes de la classe stack sont utilisables que dans un main? :-(

041
041
Niveau 10
15 avril 2012 à 16:18:35

Non, c'est utilisable partout.

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 16:30:10

Chez moi,ca ne marche pas :(
import java.util.Stack;
import java.util.*;

public class IA {

//Morceaux de code sans rapport

Stack<Integer> jhd = new Stack<Integer>(); //Ceci marche
int t = 9;
jhd.push(t); //Ca...Non.

Et je ne comprends pas pourquoi. :(

__[HRG]__
__[HRG]__
Niveau 10
15 avril 2012 à 16:51:58

C'est normal, int est un type primitif alors que Integer représente un objet. Tu dois donc faire :

Integer t = new Integer(9);

Pour plus de renseignements :

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 16:57:38

Ce n'est pas un problème de variable dans la méthode,c'est un problème de méthode. :(
Eclipse ne reconnait plus les méthodes de la classe Stack dans cette classe :(

Arabemechant
Arabemechant
Niveau 10
15 avril 2012 à 17:04:41

EDIT : Ca marche dans les méthodes de la classe. :(

Merci a tous pour vos réponses. :)

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment