| Qui est en ligne ? |
| Il y a : 9 utilisateurs en ligne, consultez le détail |
Forum » Serveur, Réseaux et Programmation » Representation d'une image par une liste chainee en JAVA |
Forum modéré par : jblecanard |
| Même auteur |
|
Score ( voter ) : |
|
| Page : [1] |
| Auteur | Message |
|---|---|
|
|
#0 Message posté le : 27-06-2007 à 19:12:59 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 13-07-2005 Nombre de messages : 206 |
aïe aïe aïe ... Bon je vous explique : Prenons l'image ppm suivante: P3 #Commentaire 155 200 15 4 4 15 000 000 000 1500 000 0157 000 000 000 000 0157 000 15150 000 000 000 Il faut qu'elle soit stockée en mémoire de la manière suivante : 000 3 -----> 1500 1 -----> 000 1 -----> 0157 1 -----> 000 4 -----> 0157 1 -----> 000 1 -----> 15150 1 -----> 000 3 / Problème j'arrive bien à créer la première cellule de la liste mais quoi que je fasse les autres cellules que je veux créer remplace la première ... Voici 2 bouts de code, une correction serait la bienvenue surtout que je bloque depuis des heures ! La création de l'image public Image (String s) throws IOException, FileNotFoundException, FinFichier
{
FileReader fr = new FileReader(s);
BufferedReader f = new BufferedReader(fr);
f.readLine(); // lit le P3
f.readLine(); // lit le commentaire
largeur = lireInt(f);
hauteur = lireInt(f);
profondeur = lireInt(f);
nom = s;
Liste Image = new Liste();
int nbOcc = 1;
pixel = new Cellule(lireInt(f), lireInt(f), lireInt(f), nbOcc);
Image.ajouterFin(pixel);
for(int i=0; i<hauteur; i++)
{
for(int j=0; j<largeur; j++)
{
tmp = new Cellule(lireInt(f), lireInt(f), lireInt(f), nbOcc);
if(tmp.getRed() == pixel.getRed() && tmp.getGreen() == pixel.getGreen() && tmp.getBlue() == pixel.getBlue())
{
pixel = tmp;
pixel.nbOcc++;
}
else
{
Image.ajouterFin(tmp);
pixel = new Cellule(lireInt(f), lireInt(f),lireInt(f), nbOcc);
}
}
System.out.print("-");
}
Terminal.sautDeLigne();
Terminal.sautDeLigne();
f.close();
}Et la méthode ajouterFin(Cellule): // Ajoute une cellule en fin de liste
public void ajouterFin (Cellule c)
{
if (tete == null){
tete = c;
}
Cellule tmp = tete;
while (tmp.suivant != null){
tmp = tmp.suivant;
tmp.suivant = c;
}
} |
|
|
#1 Message posté le : 28-06-2007 à 01:00:09 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 13-07-2005 Nombre de messages : 206 |
j'ai réussi à coder quelque chose qui fonctionne presque (c'était pas terrible ce que j'avais fait toute @ l'heure!)pixel = new Cellule(lireInt(f), lireInt(f), lireInt(f), nbOcc);
pixel2 = new Cellule(lireInt(f), lireInt(f), lireInt(f), nbOcc);
tmp = pixel2;
for (int i=0; i<nbPix; i++)
{
while(tmp.getRed() == pixel.getRed() && tmp.getGreen() == pixel.getGreen() && tmp.getBlue() == pixel.getBlue())
{
nbOcc++;
pixel2 = new Cellule(lireInt(f), lireInt(f), lireInt(f), nbOcc);
tmp = pixel2;
}
Image.ajouterFin(pixel);
pixel = tmp;
pixel2 = new Cellule(lireInt(f), lireInt(f), lireInt(f), nbOcc);
tmp = pixel2;
Image.Afficher();
}
System.out.println(" ");
f.close();"Image.Afficher()" me permet de voir si la liste créée à l'ouverture est correcte ... mais çà bloque toujours à un moment donné ... Pouvez-vous me dire s'il ya des erreurs ? des améliorations ? (sûrement) |
|
|
#2 Message posté le : 28-06-2007 à 11:04:12 |
Elfe Forum : Modérateur Association : Membre fondateur Arrivé(e) le : 08-01-2005 Nombre de messages : 3998 |
Je vois que
while (tmp.suivant != null){
tmp = tmp.suivant;
tmp.suivant = c;
}
Ne va pas du tout ! C'est normal que ta première cellule soit remplacée à chaque fois. Il faut écrire :
while (tmp.suivant != null){
tmp = tmp.suivant;
}
tmp.suivant = c;
Pourquoi t'ennuies-tu avec ça ? L'API Java fournit tout ce qu'il faut pour gérer des listes et des collections. Faire soi même des listes pour apprendre, ok, mais pour développer un projet qui en a besoin, autant prendre celles de l'API. ------------------------------------- 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 - |
|
|
#3 Message posté le : 28-06-2007 à 11:14:04 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 13-07-2005 Nombre de messages : 206 |
Bah le truc c'est que je dois me débrouiller sans cette API justement ... |
|
|
#4 Message posté le : 28-06-2007 à 11:18:58 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 13-07-2005 Nombre de messages : 206 |
je viens d'essayer la modif proposée ... çà n'avance pas, au contraire maintenant seul un élément est ajouté ensuite mon prog bloque ! |
|
|
#5 Message posté le : 28-06-2007 à 11:41:38 |
Elfe Forum : Modérateur Association : Membre fondateur Arrivé(e) le : 08-01-2005 Nombre de messages : 3998 |
Oui j'ai oublié de préciser :
if (tete == null){
tete = c;
}
else{
Cellule tmp = tete;
while (tmp.suivant != null){
tmp = tmp.suivant;
}
tmp.suivant = c;
}
Il te faut un else sinon la tête va être ajoutée deux fois. 9a veut dire quoi que ton programme bloque ? Tu as une exception ? ça boucle à l'infini ? --Message édité par jblecanard le 28-06-2007 à 11:43:31-- ------------------------------------- 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 - |
|
|
#6 Message posté le : 28-06-2007 à 12:42:21 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 13-07-2005 Nombre de messages : 206 |
boucle à l'infini ... merci du coup de main ! |
|
|
#7 Message posté le : 28-06-2007 à 16:46:00 |
Elfe Forum : Modérateur Association : Membre fondateur Arrivé(e) le : 08-01-2005 Nombre de messages : 3998 |
Mon bout de code, sans le "else", boucle en effet à l'infini après l'insertion du premier élément. N'oublie donc pas de corriger suivant mon précédent post. Il va aussi boucler si tu insères deux fois de suite le même objet. Il faut donc insérer des COPIES des objets et pas les objets eux-mêmes. En effet, si tu met deux fois l'objet "tete", il va l'insérer à la suite, puis boucler lorsque tu voudras encore ajouter un element, puisque tete.suivant va pointer sur tete. Ce ne sera pas le cas si tu insère une copie de tete, dont l'attribut "suivant" sera, lui , différent. La solution la plus sécuritaire consiste à recréer l'objet inséré dans la méthode d'insertion. La seconde consiste à prendre soit d'insérer des objets différents. Tu vois ce que je veux dire ? --Message édité par jblecanard le 28-06-2007 à 16:51:50-- ------------------------------------- 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 - |
|
|
#8 Message posté le : 28-06-2007 à 16:50:28 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 13-07-2005 Nombre de messages : 206 |
La même chose ... En fait ce n'est pas ton code qui crée la boucle infini mais la lecture du fichier PPM par mon programme. Par contre ton code remplace à chaque fois la tete de la liste et au final ma liste ne contient qu'un seul élément ... le dernier à être inséré avant la boucle infinie ! je ne m'en sortirais jamais ... |
|
|
#9 Message posté le : 28-06-2007 à 20:02:19 |
Petit scarabée Forum : Inscrit Association : Arrivé(e) le : 26-02-2007 Nombre de messages : 22 |
Salut, tu pourrais expliquer l'intérêt de cette représentation d'une image pas une liste chaînée ? parce que perso je comprends pas trop.. ------------------------------------- ex-lenounoursmignon |
|
|
#10 Message posté le : 28-06-2007 à 20:18:00 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 13-07-2005 Nombre de messages : 206 |
Je suis en formation. Et comme c'est casse-tête comme problème, çà m'apprend à être logique ... chose que j'ai du mal à faire |
|
|
#11 Message posté le : 28-06-2007 à 20:22:25 |
Scarabée Forum : Inscrit Association : Arrivé(e) le : 13-07-2005 Nombre de messages : 206 |
je précise que je viens de réussir à l'instant à ouvrir une image avec cette représentation en mémoire, j'arrive aussi à l'enregistrer mais je m'y prends mal puisque lors de l'enregistrement ma liste se vide entièrement lors de l'écriture ... Enfin je ne désespère pas ... il me reste aussi le pb du dernier pixel lors de l'enregistrement de l'image (il manque le dernier pixel de chaque image enregistrée) ... Et après ... bah après on verra ! |
| Page : [1] |
Forum » Serveur, Réseaux et Programmation » Representation d'une image par une liste chainee en JAVA |
Forum modéré par : jblecanard |
| Même auteur |
|
Score ( voter ) : |
|
- Petit scarabée : 0 pastille, moins de 100 messages
- Scarabée : 0 pastille, plus de 100 messages
- Hobbit : 1 pastille, plus de 1000 messages
- Naboo : 2 pastilles, plus de 2000 messages
- Elfe : 3 pastilles, plus de 3000 messages
- Jedi : 4 pastilles, plus de 4000 messages
- Maître Jedi : 5 pastilles, plus de 5000 messages