[Java] Question sur les listes

Résolu
antheadousa Messages postés 2 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 21 juillet 2010 - 21 juil. 2010 à 10:29
antheadousa Messages postés 2 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 21 juillet 2010 - 21 juil. 2010 à 11:11
Bonjour à tous,

J'ai un petit soucis de programmation, j'ai une liste qui contient des images, j'affiche une image de la liste et je souhaiterais qu'en appuyant sur un bouton je fasse défiler les images de ma liste, et que quel que soit la position de mon image dans la liste lorsque j'arrive au bout de la liste je puisse revenir au début, mais je n'arrive pas à le faire...pour le moment j'ai un java.lang.reflect.InvocationTargetException caused by java.lang.IndexOutOfBoundsException donc par le fait que j'arrive à la fin de ma liste...

Le code que j'ai actuellement dans l'action pour le bouton est le suivant :

int currentPositionImage = imagesList.getLevels().indexOf(image);
loadImageItemInContainerPhoto(imagesList.getLevels().get(currentPositionItem+1));

item = imagesList.getLevels().get((currentPositionItem+1)%itemsList.getLevels().size());
currentPositionItem+=1;

Que faudrait-il que je fasse pour résoudre mon problème ?

Merci d'avance pour vos réponses !

3 réponses

Madvin Messages postés 123 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 26 août 2012 3
21 juil. 2010 à 10:58
Salut,

Je ne comprends pas toutes les lignes de ton code, mais néanmoins je peux t'aider.
Il te faut tout simplement des tests de cas d'arrêts dans l'incrémentation des variables que tu utilises comme position dans la liste.

Par exemple il ne faut pas faire :

myList.get(currentPositionItem+1)


car cela produit un IndexOutOfBoundException quand currentPositionItem+1 >= myList.size()

Mais il faut plutôt faire quelque chose dans le genre :

int posInMyList = currentPositionItem+1;

// Si le nouvel index que je vais passer en paramètre dans le get dépasse l'index max, alors on le repositionne en début de liste.
if (posInMyList >= myList.size()) {
  posInMyList = 0;
}

myList.get(posInMyList); // Ainsi cette ligne de code ne produira plus d'erreur, et après être arrivé en fin de liste, on retourne en début.


Voilà en gros la solution, à toi de l'adapter à ton cas. ;)

@+
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 juil. 2010 à 10:59
Salut,

Il te faut soit traîter l'exception, soit tester l'index (currentPositionItem en l'occurence) afin de s'assurer qu'il ne dépasse pas la taille de ta liste.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
3
antheadousa Messages postés 2 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 21 juillet 2010
21 juil. 2010 à 11:11
Merci beaucoup de vos réponses rapides ^^

J'ai trouvé une solution se rapprochant de la tienne Madvin au lieu de vérifier avec des conditions j'utilise le % (j'ai toujours tendance à oublier cette chose là, ce qui au final dans l'action de mon bouton ça me donne ça comme code et ça marche pas mal :

int currentPositionImage = imagesList.getLevels().indexOf(image);

currentPositionImage = (currentPositionImage + 1) % itemsList.getLevels().size();
loadImageItemInContainerPhoto(imagesList.getLevels().get(currentPositionImage));

image= imagesList.getLevels().get(currentPositionImage);


Ma fonction loadImageItemInContainerPhoto me permet de charger l'image dans ma fenêtre.
Merci encore pour votre aide ^^
0
Rejoignez-nous