Acces a une arraylist

dufoli Messages postés 13 Date d'inscription samedi 6 décembre 2003 Statut Membre Dernière intervention 17 mai 2006 - 6 déc. 2003 à 19:40
dufoli Messages postés 13 Date d'inscription samedi 6 décembre 2003 Statut Membre Dernière intervention 17 mai 2006 - 9 déc. 2003 à 18:24
voila etat donnée que une arraylist est un tableau avec quelque methose sympatique je tente de creer un acces a une arraylist par le code source suivant...

if (!(hitplayers.Contains(this)))
{
hitplayers.Add(this);
healthhitplayer.Add(CurrentHealth - (short)hp);
}
else
{
//ici alert in consol "before hp for xp"
healthhitplayer[hitplayers.IndexOf(this)] = (short)healthhitplayer[hitplayers.IndexOf(this)]+ (short)(CurrentHealth - (short)hp);
//alert "after hp for xp"
}
hitplayers et healthhitplayer sont 2 arraylists
donc cela peut il marcher mon but est en fait de changer la valeur dans healthhitplayer a l index correspondant a l objet player mis dans hitplayers
et cela marche pas visiblement
et l acces dans un autre bout du code marche mal aussi

foreach(GamePlayer player in hitplayers)
total xp += (short)healthhitplayer[hitplayers.IndexOf(player)]
voila merci d avance de m aider a trouver
PS: une question plus global et toute simple que j n ai pas trouver est peut on accesder a un objet d une arraylist par
arraylist[index]

6 réponses

cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
6 déc. 2003 à 23:05
Bonjour,

Tout d'abord, il est possible d'accéder aux items d'une ArrayList par l'opérateur [] :
ArrayList l = new ArrayList();
l.Add(1);
l.Add(2);
Console.WriteLine(l[0]);
Console.WriteLine(l[1]);

D'autre part, la syntaxe que tu cherches me parait être :
healthhitplayer[(int)hitplayers[i]] = (int)healthhitplayer[(int)hitplayers[i]]+ (short)(10-i);

Attention au fait que l'ArrayList healthhitplayer doit avoir assez d'éléments (au moins hitplayers[i] )
0
dufoli Messages postés 13 Date d'inscription samedi 6 décembre 2003 Statut Membre Dernière intervention 17 mai 2006
7 déc. 2003 à 00:09
non non ce n est pas ca la syntax souhaiter car je stock dans la 2eme arrayliste un autre parametre en faire je stock le player dans l une et les domages associés dans l autre donc je ne met pas l index dans l autre d autre part elle font du coup exactement la meme taille car en effet j ajoute un objet au deux en meme temps avec ADD alors j espere que le fait d ajouter en meme temps dans les 2 arraylist les objet ocasionne qu ils aient le meme index ce qui me permet de recupere par le meme index les 2 objets
Ps merci pour la reponse
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
7 déc. 2003 à 11:02
Si tu veux maintenir les 2 informations cohérentes
pourquoi ne pas créer une structure regroupant les 2 valeurs et stocker cette structure dans une seule ArrayList ?

class S
{
private int info1;
private int info2;
public int Info1{set{info1=value;}get{return info1;}}
public int Info2{set{info2=value;}get{return info2;}}
public S(int i1, int i2){info1=i1; info2=i2;}
}
class Test
{
static void Main(string[] args)
{
ArrayList l = new ArrayList();
l.Add(new S(1,1));
l.Add(new S(2,2));
Console.WriteLine("["+((S)l[0]).Info1+","+((S)l[0]).Info2+"]");
Console.WriteLine("["+((S)l[1]).Info1+","+((S)l[1]).Info2+"]");
//la modif des deux valeurs à partir du même indice (ici 0)
Console.WriteLine("modif");
((S)l[0]).Info1=3;
((S)l[0]).Info2=10-3;
Console.WriteLine("["+((S)l[0]).Info1+","+((S)l[0]).Info2+"]");
Console.WriteLine("["+((S)l[1]).Info1+","+((S)l[1]).Info2+"]");
}
}
0
dufoli Messages postés 13 Date d'inscription samedi 6 décembre 2003 Statut Membre Dernière intervention 17 mai 2006
7 déc. 2003 à 13:51
mouais solution plus eleguante en effet mais dans ce cas comment choper la 2eme par rapport a la premiere variable car j en ai besoin
en fait je suis dans la classe player et j ajoute "this" a la liste de la premiere variable et un short a la 2eme et apres si je retombe sur le meme player je veux que je ne crais pas de nouvelle variable dans la deuxieme liste je veux ajouter a la variable2 existant deja un autre short
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dufoli Messages postés 13 Date d'inscription samedi 6 décembre 2003 Statut Membre Dernière intervention 17 mai 2006
7 déc. 2003 à 13:54
desoler je n ai pas trouver de bouton edit mais sinon je pourais avec mon arraylist chercher toutes les variable et chercher celle ou le player est egale a "this" mais bon ca fait pas mal de calcul ...
il y a peut etre plus mieux
merci beacoup pour tes reponses en tout cas vais deja commencer par faire une structure pour rendre cela plus propre
0
dufoli Messages postés 13 Date d'inscription samedi 6 décembre 2003 Statut Membre Dernière intervention 17 mai 2006
9 déc. 2003 à 18:24
bon comme mno tableau a 2 entree je l ai passer en hashtable sur les conseil d un ami je met player en clé et la life (short) dans la value mais ca ne marche pas alors j ai mis un try et un catch pour voir l exception en fait il me dit invalid cast donc je fais un mauvais transtipage apres avoir un peu tester il paraiterais que c est le
(short)healthhitplayer[hitplayers.IndexOf(player)]
en gros il refuse de transtipper mon objet contenue dans mon hashtable ou arraylist ca fait tout les 2 la meme chose
en short est ce normal ou faut il faire un cast static ou un truc du genre si quelqu un a une idée car aparament c est un probleme de cast mais la pour moi c est fait donc ben expliquer moi ce que il entendent par cast invalise car ca me parait valide....
PS: peut on stocker un int dans une arraylist ou une hashtable car cest ptet ca l erreur ou alors je dois leur faire quelquechose pour les rendre stockable..???
0
Rejoignez-nous