Page 1 sur 1
Beta 3 : Manifique bug de ListIndex()
Publié : sam. 18/août/2007 19:34
par Gratteur
Code : Tout sélectionner
NewList code()
InsertElement(code())
code() = 3
Debug ListIndex(code()) ; ListIndex renvoit -1 à la place de 0
Debug code() ; La liste fonctionne malgrès tout
Re: Beta 3 : Manifique bug de ListIndex()
Publié : sam. 18/août/2007 19:47
par Backup
Gratteur a écrit :Code : Tout sélectionner
NewList code()
InsertElement(code())
code() = 3
Debug ListIndex(code()) ; ListIndex renvoit -1 à la place de 0
Debug code() ; La liste fonctionne malgrès tout
la doc dit :
Renvoie dans Index la position
de l'élément courant
c'est normal, puisque avant de la lire, on commence toujours avant le premier element !! (c'est a dire -1 car -1 c'est avant Zero !!

)
CallDebugger
NewList code()
InsertElement (code())
code() = 3
Debug ListIndex (code()) ; -1 parceque l'on a pas commencé a lire !! (on est donc avant le zero soit -1)
Resultat = NextElement (code() ) ; on lit le premier element cela avance le pointeur de lecture a l'element 0 !!!
Debug code() ; il renvoi 3 normal !!! : D
Publié : sam. 18/août/2007 19:53
par Chris
C'est même étonnant que le compilo dise rien, dans un cas pareil.
Publié : sam. 18/août/2007 20:38
par Anonyme
La doc dit :
Insère un nouvel élément avant l'élément courant, ou au début de la liste si la liste est vide (c-a-d si elle ne contient pas d'élément). Ce nouvel élément devient l'élément courant de la liste.
utilise AddElement(), cela renvois 0.
Publié : sam. 18/août/2007 20:39
par Chris
@Dobro
Quoi que tu en dise, pour moi, il y a bien un bug.
NewList code() ; Tu pars d'une liste totalement vide
InsertElement(code()) ; Tu ajoutes un élément.
Insère un nouvel élément avant l'élément courant, ou au début de la liste si la liste est vide (c-a-d si elle ne contient pas d'élément). Ce nouvel élément devient l'élément courant de la liste.
Le premier élément d'une liste, c'est bien toujours 0. Pas -1
L'élément courant est celui qu'on vient d'ajouter dans la liste qui était vide, donc ListIndex() devrait bien être 0, et non -1
Publié : sam. 18/août/2007 20:52
par Anonyme
Donc , y a bien un bug.

Publié : sam. 18/août/2007 20:57
par Gratteur
Bien sur qu'il y a un bug, vous m'avez fait peur

Publié : sam. 18/août/2007 21:00
par Chris
Ben oui. Le bug, c'est que ListIndex() n'est pas remis à jour quand tu insères un élément.
Code : Tout sélectionner
NewList code()
InsertElement(code()) : code() = 3
Debug ListIndex(code()) ; ListIndex renvoit -1 à la place de 0
Debug code() ; La liste fonctionne malgrès tout
ForEach code():Next ; On fait un tour de la liste, et ListIndex est remis à jour
Debug ListIndex(code()) ; ListIndex renvoit 0
Publié : sam. 18/août/2007 21:20
par Gratteur
Publié : sam. 18/août/2007 21:29
par Chris
Ou tu fais un tour pour rien pour remettre le pointeur de l'index à jour.
Publié : sam. 18/août/2007 22:01
par Backup
Chris a écrit :Ben oui. Le bug, c'est que ListIndex() n'est pas remis à jour quand tu insères un élément.
ben peut etre, faudrai en parler au forum anglais,pour voir
c'est embetant, parceque si c'est un bug, je vais avoir pas mal de chose a changer dans mon pureGolo3D a la prochaine mise a jour de Purebasic ....
toute ma pile repose sur une liste chainée !

Publié : sam. 18/août/2007 22:06
par Chris
En fait, le bug n'existe pas si tu insères un élément dans une liste contenant déjà des éléments.
Il n'apparait que dans une liste vide.
Code : Tout sélectionner
NewList Code()
For i = 0 To 20
AddElement(Code()) : Code() = i
Next
; On sélectionne le 11 eme élément, et on insère une valeur de 125
SelectElement(Code(), 11) : Debug Str(ListIndex(Code()))+" - "+Str(Code())
InsertElement(Code()) : Code() = 125 : Debug Str(ListIndex(Code()))+" - "+Str(Code())
Debug " ---------------------------------------- "
; CallDebugger
ForEach Code()
Debug Str(ListIndex(Code()))+" - "+Str(Code())
Next
Publié : sam. 18/août/2007 22:27
par Backup
Chris a écrit :En fait, le bug n'existe pas si tu insères un élément dans une liste contenant déjà des éléments.
Il n'apparait que dans une liste vide.
oui , mais j'espere qu'une correction éventuelle, ne va pas tout chambouler le fonctionnement

Publié : sam. 18/août/2007 22:29
par Chris
De toute façon, attention si vous voulez remplir toute une liste en utilisant uniquement la fonction InsertElement().
Les valeurs seront inversées dans la liste. La dernière entrée sera en début de liste puisque InsertElement() place la valeur AVANT l'élément courant.
Code : Tout sélectionner
NewList Code1()
For i = 0 To 20
InsertElement(Code1()) : Code1() = i
Next
Debug " ---------------------------------------- "
ForEach Code1()
Debug "Index "+Str(ListIndex(Code1()))+" - Valeur "+Str(Code1())
Next
Publié : sam. 18/août/2007 22:31
par Backup
Chris a écrit :De toute façon, attention si vous voulez remplir toute une liste en utilisant uniquement la fonction InsertElement().
Les valeurs seront inversées dans la liste. La dernière entrée sera en début de liste puisque InsertElement() place la valeur AVANT l'élément courant.
genial pour simuler une pile LIFO
