Aller au contenu

[RESOLU] Java: blocage pour une sélection de nombre pair


jakol

Messages recommandés

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

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 :transpi: :transpi::transpi: :transpi:)

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) :eeek2::eeek2::eeek2::eeek2:

Je m'amuserais peut être ce soir à le faire

Lien vers le commentaire
Partager sur d’autres sites

Vérifies bien les limites, j'ai fait cela à l'arrache: :transpi::transpi::transpi:

Il faut fait attention en travaillant "in place": à chaque fois qu'on dépile un nombre impair, la taille de ton tableau change :francais:

Pour tes nombres aléatoires, c'est bon en fait :transpi: J'ai trop fait de C :francais:

Et j'ai eu la flemme de remplacer tes tableaux :oops::dd:

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

On peut aussi:

  1. Supprimer l'attribut privé rand qui ne sert que dans le constructeur
  2. 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)
  3. Supprimer dans le constructeur le "10" (qui est la maximum de l'intervalle [0, max[), et le passer en paramètre du constructeur.
  4. Déjà proposé: mettre des arrayList avec des iterator, pour virer l'attribut size_max
Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...