Bienvenue visiteur (Inscription |  Connexion)
Qui est en ligne ?
Il y a : 13 utilisateurs en ligne, consultez le détail
Auteur Message
zephyroth
#0 Message posté le : 28-06-2007 à 11:12:58


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 13-07-2005
Nombre de messages : 206
bon je refais un post et j'ai marqué l'autre comme résolu .

En fait je suis perdu ... Je n'arrive pas à ajouter une cellule en fin de liste !
Je vous file le code, vous pourrez l'essayer et me dire pourquoi tous les entiers entrés ne sont pas insérés dans la liste !

import java.io.*;

class Cellule{

	int valeur;

	Cellule suivant;

	Cellule(int v)

	{

		valeur = v;

		suivant = null;

	}

}

class Liste{

	Cellule tete;

	

	Liste()

	{

		tete = null;

	}

	

	// Affiche la liste

	public void Afficher()

	{

		if(estVide())

		{

			System.out.println("NULL/");

		}

		else

		{

			for (int i=0; i<Longueur(); i++)

			{

				System.out.print(tete.valeur + " -----> ");

				tete = tete.suivant;

			}

		}

	}

	// Calcule et retourne la taille de la liste

	public int Longueur()

	{

		Cellule c = tete;

		int taille = 0;

		while(c != null){

			taille ++;

			c = c.suivant;

		}

		return taille;

	}

	public boolean estVide()

	{

		if(tete == null)

			return true;

		else

			return false;

	}

	

	public void ajouterFin (int x)

	{

		if (tete == null){

			tete = new Cellule(x);

		}

		else

		{

			ajouterCellule(tete, x);

		}

	}

	

	public void ajouterCellule(Cellule c, int a)

	{

		if(c.suivant == null)

		{

			c.suivant = new Cellule(a);

		}

		else

		{

			ajouterCellule(c.suivant, a);

		}

	}

}



class Test{

	public static void main (String [] args) throws IOException

	{

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		Liste liste = new Liste();

		int a=0;

		int b=0;

		System.out.println("Combien d'entiers voulez-vous inserer ?");

		a = Integer.parseInt(br.readLine());

		for (int i=0; i<a; i++)

		{

			System.out.println("Entrez l'entier");

			b = Terminal.lireInt();

			liste.ajouterFin(b);

		}

		System.out.println("");

		System.out.println("Voici la liste :");

		liste.Afficher();

		System.out.println("");

	}		

}
Azollyx
#1 Message posté le : 28-06-2007 à 12:09:44


Naboo


Forum : Modérateur
Association : Président
Arrivé(e) le : 09-04-2006
Nombre de messages : 2033
Ce que je peux te conseiller, c'est d'utiliser une version de liste récursive : pas d'objet cellule mais que des listes. En fait, une liste est une tete plus une suite qui est une autre liste. Jusqu'à ce qu'il n'y ait plus de suite.
Par exemple, la liste (5,3,1) est en fait (5,(3,(1))). Cela permet de bien comprendre les mécanismes sous-jacents et ne réprente pas de réel défaut de performances (dans la mesure où tu travailles par référence). C'est une version simplifée mais efficasse des objets chaînés. Tu peux noter que cette méthode peut te permettre d'implémenter facilement des arbresx et pas d'autres sortes de SDD.
Atta, je te fais un petit bout de code.

--Message édité par Azollyx le 28-06-2007 à 12:13:05--


-------------------------------------
La force vaincra ! :D
Azollyx
#2 Message posté le : 28-06-2007 à 12:29:17


Naboo


Forum : Modérateur
Association : Président
Arrivé(e) le : 09-04-2006
Nombre de messages : 2033
Et voilà une petite liste de base ; c'est .
PS : j'ai utilisé la généricité. Cela permet de choisir et forcé le type que contiendra la liste (dans le main, j'ai choisi que E était un String). Si ça t'embrouille, enlève tout de ce qui est dans des chevrons et remplace E par Object. Mais comme le code n'est pas très long, tu devrais t'en sortir. En fait, tout en haut j'ai écrit "Liste<E>" ce qui fait que "E" est maintenant un type. Et ce type est à choisir lors de la création de l'object (Liste... = new Liste<String>() : je choisi un String comme type).


D'autre part, une méthode body() ou getBody() retournant une Liste<E> pourrait t'être bien utile : tu pars du principe que la liste a un coprs / une suite et tu te contente de tester s'il est vide.

--Message édité par Azollyx le 28-06-2007 à 12:36:41--


-------------------------------------
La force vaincra ! :D
zephyroth
#3 Message posté le : 28-06-2007 à 12:47:06


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 13-07-2005
Nombre de messages : 206
ok merci beaucoup !
je vais décortiquer ton code !
Azollyx
#4 Message posté le : 28-06-2007 à 20:30:29


Naboo


Forum : Modérateur
Association : Président
Arrivé(e) le : 09-04-2006
Nombre de messages : 2033
Alors ?

-------------------------------------
La force vaincra ! :D
jblecanard
#5 Message posté le : 28-06-2007 à 21:40:06


Jedi


Forum : Modérateur
Association : Membre fondateur
Arrivé(e) le : 08-01-2005
Nombre de messages : 4017
La généricité c'est super mais ça ne compile qu'à partir des sources 1.5. Attention donc, sur certaines machines pro, on n'en dispose pas...

-------------------------------------
C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon -
Azollyx
#6 Message posté le : 28-06-2007 à 22:03:40


Naboo


Forum : Modérateur
Association : Président
Arrivé(e) le : 09-04-2006
Nombre de messages : 2033
Sérieux ? Quel genre de machines ? Il suffit de mettre à jour le JDK, non ?

-------------------------------------
La force vaincra ! :D
jblecanard
#7 Message posté le : 28-06-2007 à 22:21:12


Jedi


Forum : Modérateur
Association : Membre fondateur
Arrivé(e) le : 08-01-2005
Nombre de messages : 4017
Bah sur les machines Sun de mon école, on n'en dispose pas par exemple. Et mettre à jour le JDK n'est pas une si mince affaire : il s'agit d'un parc informatique complet, utilisé par moults élèves et professeurs.

-------------------------------------
C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon -