bonsoir à tous !
Je suis debutante en java, je souhaite initialiser une pile à vide je connais pas la syntaxe, quelqu'un peut m'aider?
bonsoir à tous !
Je suis debutante en java, je souhaite initialiser une pile à vide je connais pas la syntaxe, quelqu'un peut m'aider?
Tu peux utiliser la classe Stack (de java.util) :
Il y a également les méthodes empty() et pop().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Stack<Integer> test = new Stack<Integer>(); test.push(1); //...
Voir la javadoc : http://java.sun.com/j2se/1.4.2/docs/...til/Stack.html
bonjour !
j'ai crée une classe pile qui permet de convertir une expression arithmetique infixée à postfixé.
j'arrive pas à caster la valeur du le sommet de la pile qui est un objet en int pour avoir le résultat de l'expression.
je vous poste le bout du code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 public static int evaluation(String E){ int n = E.length(); /*N est la longueur du tableau tab*/ Pile s = new Pile(n); /*création d'une pile de taille n*/ int val_sommet_pile; int val_sommet_pile1; int val_sommet_pile2; int fact=0; int res = 0; int t; char st; int t2; for (int i=0; i<(n); i++){ if ((E.charAt(i) >= '0') && (E.charAt(i) <= '9')){ t=(int)E.charAt(i)-48; String tmp= "" + t; s.empiler(tmp); } else if(E.charAt(i)=='!'){ val_sommet_pile=E.charAt(s.sommet); s.depiler(); fact = factorielle(val_sommet_pile); String tmp = "" + fact; s.empiler(tmp); } else if((E.charAt(i)=='+')||(E.charAt(i)=='-')||(E.charAt(i)=='*')||(E.charAt(i)=='/')||(E.charAt(i)=='^')){ st=s.v[s.sommet-1]; val_sommet_pile1=st; s.depiler(); t=(int)E.charAt(s.sommet-1)-48; val_sommet_pile2=t; s.depiler(); if(E.charAt(i)=='+') res = val_sommet_pile2 + val_sommet_pile1; else if (E.charAt(i)=='-') res = val_sommet_pile2 - val_sommet_pile1; else if (E.charAt(i)=='*') res = val_sommet_pile2 * val_sommet_pile1; else if (E.charAt(i)=='/') res = val_sommet_pile2 / val_sommet_pile1; else if (E.charAt(i)=='^') res = val_sommet_pile2 ^ val_sommet_pile1; String tmp = "" + res; s.empiler(tmp); } } //t2=(int)E.charAt(s.sommet-1)-48; return res; }
J'ai fait une pile LIFO si tu veux (sans Stack).
Je ne sais pas si tu trouveras ton bonheur là-dedans ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 public class PileLifo { private int nb; private int[] pile; public PileLifo(int taille){ nb=0; pile=new int[taille]; } public void empiler(int elt){ pile[nb]=elt; nb++; } public int depiler(){ if (!estvide()) return pile[nb-- -1]; else return -999; } public boolean estvide(){ return (nb<=0); } public int nbelt(){ return nb; } public int sommet(){ if(!estvide()) return pile[nb-1]; else return -888; } public static void main(String[] args) { PileLifo p = new PileLifo(10); p.empiler(2); p.empiler(7); p.empiler(5); p.empiler(9); p.empiler(1); System.out.println(p.sommet()); System.out.println(p.depiler()); System.out.println(p.sommet()); System.out.println(p.nbelt()); p.empiler(14); System.out.println(p.sommet()); System.out.println(p.estvide()); System.out.println(p.depiler()); System.out.println(p.sommet()); System.out.println(p.depiler()); System.out.println(p.sommet()); System.out.println(p.depiler()); System.out.println(p.sommet()); System.out.println(p.depiler()); System.out.println(p.sommet()); System.out.println(p.depiler()); System.out.println(p.sommet()); System.out.println(p.depiler()); System.out.println(p.sommet()); System.out.println(p.estvide()); } }
Sinon : http://java.developpez.com/faq/java/...LLECTIONS_pile
j'ai déja crée la pile, par contre je voudrer evaluer une expression arithmetique genre (3+2)*6 en postfixée = 3 2 + 6 * =30. mon code est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 public class Pile { private Object[] v; private int taillemax=1000; private int sommet; public Pile(){ v=new Object[taillemax]; sommet=0; } public Pile(int n){ taillemax=n; v=new Object[taillemax]; sommet=0; } public boolean estVide(Pile v){ return sommet==0; } public Object depiler(){ v[sommet-1]=null; return v[--sommet]; } public void empiler(Object o){ v[sommet++]=o; } public static int factorielle(int n){ if(n == 0) { return 1; } else { return n*factorielle(n-1); } } public static String Inf2Post(String args) { int N = args.length(); Pile s = new Pile(N); String res=""; for (int i = 0; i < N; i++) { if (args.charAt(i) == ')'){ int som = s.sommet-1; res = res + s.v[som] +" "; s.depiler();} if (args.charAt(i) == '(') continue; if(args.charAt(i)==' ')continue; if ((args.charAt(i) == '+') || (args.charAt(i) == '*')|| (args.charAt(i) == '-')|| (args.charAt(i) == '/')) s.empiler(args.charAt(i)); if (args.charAt(i) == '!'){}; if((args.charAt(i) >= '0') && (args.charAt(i) <= '9')){ while ((args.charAt(i) >= '0') && (args.charAt(i) <= '9')) res =res+args.charAt(i++); i--; res=res+" "; } } return res; } public static int evaluation(String E){ int n = E.length(); //N est la longueur de la chaine Pile s = new Pile(n); //création d'une pile de taille n int val_sommet_pile; int val_sommet_pile1; int val_sommet_pile2; int fact=0; int res = 0; int t; char st; int t2; for (int i=0; i<(n); i++){ if ((E.charAt(i) >= '0') && (E.charAt(i) <= '9')){ t=(int)E.charAt(i)-48; String tmp= "" + t; s.empiler(tmp); } else if(E.charAt(i)=='!'){ val_sommet_pile=E.charAt(s.sommet); s.depiler(); fact = factorielle(val_sommet_pile); String tmp = "" + fact; s.empiler(tmp); } else if((E.charAt(i)=='+')||(E.charAt(i)=='-')||(E.charAt(i)=='*')||(E.charAt(i)=='/')||(E.charAt(i)=='^')){ st=s.v[s.sommet-1]; val_sommet_pile1=st; s.depiler(); t=(int)E.charAt(s.sommet-1)-48; val_sommet_pile2=t; s.depiler(); if(E.charAt(i)=='+') res = val_sommet_pile2 + val_sommet_pile1; else if (E.charAt(i)=='-') res = val_sommet_pile2 - val_sommet_pile1; else if (E.charAt(i)=='*') res = val_sommet_pile2 * val_sommet_pile1; else if (E.charAt(i)=='/') res = val_sommet_pile2 / val_sommet_pile1; else if (E.charAt(i)=='^') res = val_sommet_pile2 ^ val_sommet_pile1; String tmp = "" + res; s.empiler(tmp); } } //t2=(int)E.charAt(s.sommet-1)-48; return res; } public static void main(String[] args) { String i = ConsoleG.lireString() ; System.out.println("lexpression est:"+i ); Pile p = new Pile(); System.out.print("postfixee : "); String e=p.Inf2Post(i); System.out.println(e); // System.out.println(p.evaluation(e)); } }
Partager