Problème affectation variable

Signaler
Messages postés
3
Date d'inscription
jeudi 8 décembre 2011
Statut
Membre
Dernière intervention
29 décembre 2011
-
Messages postés
3
Date d'inscription
jeudi 8 décembre 2011
Statut
Membre
Dernière intervention
29 décembre 2011
-
Bonjour à tous !

Voilà mon premier message sur le forum et malheureusement c'est pour demander de l'aide.
J'écris un algorithme de pathfinding (algorithme A* pour trouver un schéma). Dans mon algorithme je créé un tableau d'un type personnalisé.

Description du type personnalisé:
  Public Class Casecarte


        Public DistanceDépart, DistanceArrivée, SommeDistance As Integer
        Public Position As Point 'La position du point actuel étudié
        Public Parent As Casecarte 'Son parent

    End Class


Je créé un tableau succ(3) de Casecarte et je le remplie de cette façon:

            Dim succ(3) As Casecarte
            
            For i As Integer = 0 To 3
                succ(i) = New Casecarte
                succ(i) = pointActuel

            Next


            succ(0).Position.X = pointActuel.Position.X
            succ(0).Position.Y = pointActuel.Position.Y - 1
            succ(1).Position.X = pointActuel.Position.X + 1
            succ(1).Position.Y = pointActuel.Position.Y
            succ(2).Position.X = pointActuel.Position.X
            succ(2).Position.Y = pointActuel.Position.Y + 1
            succ(3).Position.X = pointActuel.Position.X - 1
            succ(3).Position.Y = pointActuel.Position.Y


Le pointActuel étant un Casecarte

Mon problème c'est que l'affectation des positions pose problème ! Si j'affecte, par exemple 2 à succ(0).Position.X, tous les autres succ(i).Position.X (pour i variant de 0 à 3) vont avoir la même valeur.

Je ne vois pas ce qui cloche !

Si vous pouvez me venir en aide, je vous remercie d'avance !

5 réponses

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
Salut
Ou est déclaré pointActuel ?
Messages postés
3
Date d'inscription
jeudi 8 décembre 2011
Statut
Membre
Dernière intervention
29 décembre 2011

Salut et tout d'abord merci d'avoir pris le temps de me lire et de me répondre.

pointActuel est déclaré dans ma fonction Recherche chemin. Quoi qu'il en soit, pointActuel est bien défini comme un type Casecarte et possède ainsi une position etc...
Il reste le même pendant toute la phase d'affectation des variables succ(i).position.x et y.

Pour moi ce problème n'est pas logique, car il ne devrait pas y avoir d'influence entre chaque affectation.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
Salut

quand tu écris
For i As Integer = 0 To 3
    succ(i) = New Casecarte
     succ(i) = pointActuel
 Next


tous les succ(i) ont le meme pointActuel
parce que quand tu écris
succ(i) = pointActuel ,succ(i) obtient l'addresse(pointer) de pointActuel
donc tous les succ(i) recoivent la meme addresse
donc peut etre écrire
For i As Integer = 0 To 3
    succ(i) = New Casecarte
    succ(i).DistanceDépart = pointActuel.DistanceDépart
 '   et la meme chose pour tous les autres membres de casecarte

 Next


evite d'utiliser les accents dans les noms des
variables fonctions etc

Bonjour,

Pourquoi ne pas utiliser une List(Of casecarte) ?
dim maliste as new list(of casecarte)

Plus d'index à gérer, recherches, ajouts, modifs facilités etc...

Pourquoi ne pas renseigner ton 'pointActuel' dans le constructeur de la classe :
Public Class Casecarte
    sub new(ptact as point)
       position = ptact
    end sub
    ...


Tu aurais juste à écrire :
maliste.add(new casecarte(pointActuel)))
Messages postés
3
Date d'inscription
jeudi 8 décembre 2011
Statut
Membre
Dernière intervention
29 décembre 2011

Bonjour !

Le problème venait bien de "succ(i) = pointActuel".
Visiblement, je n'avais pas besoin de le mettre, en l'enlevant j'ai résolu le problème. Merci de l'explication ShayW !

banana32 je préférais trouver la solution à ce problème en gardant les mêmes notations (pour ne pas changer toutes la suite) et je voulais surtout savoir ce qui posait problème ! Mais ta solution paraît intéressante. Je retiendrais ça si jamais un problème se présente !

Quoi qu'il en soit, mon algo marche maintenant.

Merci de votre aide !