Probleme d'ajout dans une liste vb

Résolu
salut , voila j'ai une arraylist qui a chaque fois je lui ajoute un tableau de caractère mais le dernier élément écrase tous les autre

voila un exemple du code :

Public mat(4) As Char
Public suc As ArrayList
suc = New ArrayList
mat = {"X", "_", "O", "_"}
For i = 0 To 2
suc.Add(mat)
mat(i + 1) = "T"
MessageBox.Show(suc.Item(i))
Next
MessageBox.Show(suc.Item(0))
MessageBox.Show(suc.Item(1))
MessageBox.Show(suc.Item(2))

aidez moi svp merci

2 réponses

  1. merci pour la réponse voila j'ai essayer avec
    suc = New List(Of Char())
    mat = {"X", "_", "O", "_"}
            For Each lLine In mat
                suc.Add(lLine) 'jai une erreur ici
                Dim j As Integer = 0
                mat(j + 1) = "T"
                j += 1
                MessageBox.Show(suc.Item(j))
    
            Next
    

    est ce que tu peut m'aidez
    1. Modérateur
      "jai une erreur ici"
      Quelle erreur ?

      Tu veux ajouter quoi à ton "suc" ?
      Les caractères ou le tableau de caractères ?
    2. Modérateur
      Dans ce cas, Il faut ajouter ton tableau (avec le ".ToArray()") et utiliser un for classique (avec le GetUpperBound).

      Pour ta variable "j", attention à la portée, la portée que tu lui a mi fait qu'elle est remise à 0 à chaque boucle (car déclarée dans le for).
    3. @NHenryMERCI pour tous ça marche très bien ^_^ avec (suc.Add(mat.ToArray)) bonne continuation
  2. Modérateur
    Il aurait été bien de préciser que tu fais un VB.NET, cela évite de penser que c'est du VB6/A.

    Ensuite, à la place de ArrayList, essayes plutôt une List(Of Char()), ce sera plus sûr.

    Pour ton for :
    For i= 0 To 2
    Actives "Option Explicit" et "Option Strict" dans les propriétés de ton projet.

    A la place de mettre des bornes en dur, un :
    For i=0 to mat.GetUpperBound(0)
    serait mieux.
    tu peux aussi utiliser For Each :
    For Each lLine in mat
    lLine contiendra la valeur de ta case de ton tableau.

    Dans ton for, tu fais :
    For i = 0 To 2
        suc.Add(mat)
        mat(i + 1) = "T"
        MessageBox.Show(suc.Item(i))
    Next 


    Tu ajoutes ton tableau à ton ArrayList, puis tu écrase l'item suivant (et non l'item actuel).

    Pour information, les tableaux sont ajoutés en référence, donc modifier le tableau modifie aussi les références ajoutées.
    Essayes d'utiliser :
    suc.Add(mat.ToArray())

    If a Dalek is a being of pure hate...what happens when Cadence uses her love spell on one?
    En VB.NET pensez à activer "Option Explicit" et "Option Strict"