jakol Posté(e) le 30 décembre 2011 Partager Posté(e) le 30 décembre 2011 blocage pour une sélection de nombre pair Salut On m'a demandé de faire un td concernant les Piles dans un tableau 1) Il s'agit d'empiler une Pile (où des nombres ont été sélectionnés de façon aléatoire) et l'afficher 2)Puis de sélectionner uniquement les nombres pairs et les afficher. J'ai fait le 1) mais je bloque pour le 2)....Si vous avez des suggestions, ce serait sympa de me les faire partager... Merci import java.util.*; class PileTab2 { int taille=3; int[]tab=new int[taille]; int hauteur; //nombre d'entiers ranges Random rand = new Random(); // int tabs= rand.nextInt(100); public void afficheA() { for(int i=0;i<taille;i++) { int tabs=rand.nextInt(10); this.empiler(tabs); //System.out.print(""+tabs+" "); } System.out.println(""); } public void empiler(int tabs) { if(hauteur==taille) { taille++; int[] tabBis=new int[taille]; for(int i=0;i<hauteur;i++) { tabBis=tab; tab=tabBis; } tab[hauteur]=tabs; hauteur++; } System.out.print(" "+tabs+" "); this.PilePair(tabs); } public void PilePair(int tabs) { int[] tabBis=new int[taille]; for(int i=0;i<hauteur;i++) { if((tabs%2)==0) { tabBis=tabs; } } tab=tabBis; System.out.println(""); System.out.println ("liste de pairs "+tab+""); System.out.print (tab+" "); } public static void main(String[]args) { PileTab2 Pt=new PileTab2(); Pt.afficheA(); } } <config>Linux / Firefox 8.0.1</config> Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 30 décembre 2011 Partager Posté(e) le 30 décembre 2011 T'es coding style sont très mauvais et aussi ton code. Ne fais pas des tableaux à la C, mais utilises plutôt arrayList. Arrêtes de créer des tableaux à tout bout de champ, et ta génération est mauvaise: rand()%(b-a) + a, pour un intervalle [a, b] Et l'énorme problème (gros malin ) Dans la méthode afficheA tu vas de 0 à taille et donc tu empiles (taille) fois. Mais dans ta méthode empiler ton test (hauteur == taille) est mauvais (jamais vrai, donc jamais empilé) et surtout tu modifies taille (hauteur d'accord) Je m'amuserais peut être ce soir à le faire Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 30 décembre 2011 Partager Posté(e) le 30 décembre 2011 Vérifies bien les limites, j'ai fait cela à l'arrache: Il faut fait attention en travaillant "in place": à chaque fois qu'on dépile un nombre impair, la taille de ton tableau change Pour tes nombres aléatoires, c'est bon en fait J'ai trop fait de C Et j'ai eu la flemme de remplacer tes tableaux import java.util.*;class PileTab2{int size_max;int[] array;private int size;private Random rand;public PileTab2(int init_size_max) { size = 0; size_max = init_size_max; array = new int[size_max]; rand = new Random(); int elt = rand.nextInt(10); this.empiler(elt); System.out.print("Init: [" + elt); for (int index = 1; index < size_max; index++) { this.empiler(elt); System.out.print(", " + elt); elt = rand.nextInt(10); } System.out.println("]");}public void display() { // XXX TODO: Test if array[0] exists System.out.print("Display: [" + array[0]); for (int index = 1; index < size_max; index++) { System.out.print(", " + array[index]); } System.out.println("]");}public void empiler(int value) { if ((size - 1) >= size_max) return; for (int index = (size - 1); index >= 0; index--) { array[index + 1] = array[index]; } size++; array[0] = value;}public void depiler(int pivot) { if (pivot < 0) return; for (int index = pivot; index < (size - 1); index++) { array[index] = array[index + 1]; } size--; array[size] = 0;}public void noOdd() { for (int index = (size_max - 1); index >= 0; index--) { // or int index = (size - 1) if ((array[index] % 2) != 0) { depiler(index); } }}public static void main(String[] args) { PileTab2 pile = new PileTab2(9); pile.display(); pile.noOdd(); pile.display();}} Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xaelias Posté(e) le 30 décembre 2011 Partager Posté(e) le 30 décembre 2011 Je connais pas le java. Juste pour dire qu'un tableau qui est indicé de 0 à taille a (taille + 1) éléments ;-) Sinon j'ai lu vite fait le dernier code proposé, hors syntaxe que je ne maîtrise pas, ça a l'air d'être bon. (Pareil, pas vérifié les indices ^^) Lien vers le commentaire Partager sur d’autres sites More sharing options...
jakol Posté(e) le 30 décembre 2011 Auteur Partager Posté(e) le 30 décembre 2011 Salut merci beaucoup pour votre aide. Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 31 décembre 2011 Partager Posté(e) le 31 décembre 2011 On peut aussi: Supprimer l'attribut privé rand qui ne sert que dans le constructeur Supprimer mes print dans le constructeur et appeler la méthode display à la fin (peut être, passez en paramètre de cette méthode le début: "Init", "Empiler", etc) Supprimer dans le constructeur le "10" (qui est la maximum de l'intervalle [0, max[), et le passer en paramètre du constructeur. Déjà proposé: mettre des arrayList avec des iterator, pour virer l'attribut size_max Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.