Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Pour les tests, on défini une classe, nommée « TestPile » qui contiendra la méthode main(). Pour la pile, on
utilise un tableau d'entiers. Au départ, ce tableau aura une taille initiale. En cas de besoin, il faut agrandir ce
tableau : lorsqu'il est plein et que l'on veut encore empiler un entier; on pourra alors agrandir le tableau d'une
quantité déterminée (par exemple égale au double de la taille du tableau courant).
Solution
import java.io.*;
class PileVide extends Exception {
public PileVide() { }
}
class Pile {
private int laPile[]; // Le tableau (la pile) dans lequel on va empiler les entiers positif.
private int dernier=-1; // l’attribut « dernier » désigne la position du dernier élément de la pile.
public Pile(int n) { // créé le tableau « laPile » avec une taille initiale lu au clavier.
laPile=new int[n];
}
public void afficher() { /* affiche les éléments de la pile. Attention: les éléments de la pile
sont situés entre 0 et la valeur de l’attribut « dernier ». /*
for(int i=0;i<=dernier;i++)
System.out.print(laPile[i]+" ");
System.out.println();
}
public boolean estVide() {
if (dernier<0)
return true;
else
return false;
}
public void empiler(int x) { /* ajout d'un élément dans la pile. Puisque on travaille avec des
tableaux et non avec des listes chainées, alors on doit agrandir la
taille du tableau lorsqu'il est plein et que l'on veut encore empiler
un entier. On pourra, par exemple, doubler la taille du tableau */
SMI-S5 Solution TP-4 : POO-Java, 2012-2013 1
int l=laPile.length;
dernier++;
if (dernier <laPile.length-1){ // s'il reste encore des places dans le tableau
laPile[dernier]=x;
}
else { /* si non, on créé un nouveau tableau « tab », de taille égale au double du tableau
courant « laPile », ensuite on copie les éléments du tableau courant « laPile »
dans le nouveau tableau « tab ».
Enfin, on change la référence de « laPile » qui référencera « tab ». */
int[] tab= new int [2*l];
System.arraycopy(laPile, 0, tab, 0, l); //copie des éléments de « laPile » dans « tab »
laPile=tab;
laPile[dernier]=x; // ajout de l’élément à empiler.
}
}
public int depiler() throws PileVide {
if (this.estVide()) throw ( new PileVide() );
int x = laPile[dernier];
dernier--; /* supprimer le dernier élément de la pile. Donc, on doit changer la position
du dernier élément de la pile. */
return x;
}
}
public class TestPile {
public static void main(String[] args) {
InputStreamReader in = null;
BufferedReader tampon = null;
try {
in = new InputStreamReader(System.in);
tampon = new BufferedReader(in);
/* On saisi un entier pour taille initiale du tableau */
System.out.print("Entrez la taille initiale de la pile : ");
int n = Integer.parseInt(tampon.readLine()); // conversion de String en un entier
Pile p=new Pile(n); // création d'une instance de la classe Pile
while (true) { /* saisi des éléments à empiler. Remarque: On peut saisir un
nombre d'éléments supérieur à n. Dans ce cas agrandissement
automatique de la taille du tableau (voir méthode « empiler() »). */
System.out.print("Entrez un élément à empiler : ");
int x = Integer.parseInt(tampon.readLine());
if (x==-1) // on s’arrête lorsque l'élément saisi es égale à -1
break;
else
p.empiler(x);
}
p.afficher(); // faire un affichage pour la vérification