IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Tableaux a deux dimentions et NEW [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 44
    Points
    44
    Par défaut Tableaux a deux dimentions et NEW
    Bonjour.

    Tout d'abord (pour comprendre la suite), j'ai dans mon code définit la classe "dipstick" suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Class dipstick
            Public Value As Integer
            Public Maximum As Integer
            Public Sub New(ByVal Optional TheValue As Integer = 0, ByVal Optional TheMaximum As Integer = 100)
                Value = TheValue
                Maximum = TheMaximum
            End Sub
        End Class
    J'ai également définit un tableau de dipstick :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public dipstickS()() As dipstick
    J'ai aussi placé dans la procédure de chargement du formulaire un bout de code qui affecte une valeur a chaque élément du tableau que je souhaite utiliser (20 lignes et 20 colonnes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            For i As Integer = 0 To 19
                For j As Integer = 0 To 19
                    dipstickS(i)(j) = New dipstick(0,0)
                Next
            Next
        End Sub
    Aujourd'hui je suis face a un problème qui me parais bizard, en effet, ce dernier code genere une exception : "L'exception System.NullReferenceException n'a pas été gérée" et l'on me propose alors "d'inserrer le new manquant"

    Ce probleme m'arrive fréquament lorsque je fait des collections et le fait de rajouter new règle le problème.

    Sauf qu'une fois que je rajoute le fameux new comme ainsi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public dipstickS()() As new dipstick(0,0)
    on me dit que le mot clef NEW ne peut pas être utilisé avec un tableau...

    J'ai aussi tenter avec dipstickS.Initialise sans succes

    S'il vous plais, je vous serais éternellement reconnaissant de votre précieuse aide.

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    dipstickS n'est pas un tableau de dipstick et encore moins un tableau à 2 dimensions mais un tableau de tableaux de dipstick.
    Après tu n'as fait que déclarer ce tableau, mais à aucun moment tu ne l'as initialisé donc en attendant il vaut Nothing et lors que tu indexes ce "tableau" ça plante avec l'erreur que tu mentionnes.
    Là où ça se "complique" c'est que même en initialisant ton tableau ça ne suffira pas car il contient d'autres tableaux qu'il faut aussi initialiser.

    Du coup la """bonne""" façon de faire serait plutôt dans ce goût là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dipstickS = New dipstick(19)() {} ' dimensionne le tableau principal (index maximal 19)
    For i As Integer = 0 To 19
        dipstickS(i) = New dipstick(19) {} ' dimensionne le "sous-tableau" pour cet indice du tableau principal (index maximal 19 également)
        For j As Integer = 0 To 19
            dipstickS(i)(j) = New dipstick() ' en gardant les valeurs par défaut du constructeur de ta classe
        Next
    Next
    Après à mon avis ce que tu souhaitais c'était un tableau à 2 dimensions et là ça simplifie un peu les choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ' déclaration du tableau
    Public dipstickS(,) As dipstick
     
    ' initialisation
    dipstickS = New dipstick(19, 19) {} ' dimensionne le tableau intégralement en précisant les indices maximaux de chaque dimension (19 dans les 2 cas)
    For i As Integer = 0 To 19
        For j As Integer = 0 To 19
            dipstickS(i, j) = New dipstick() ' idem que précédemment, utilisation du constructeur avec les valeurs par défaut
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Dans ta classe, tu dois avoir au moins une sub new, même si elle est plus vide que vide.

    Et je ne suis même pas sûr que tu puisses l'éviter, même avec plusieurs autres sub new "pleines".
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Dans ta classe, tu dois avoir au moins une sub new, même si elle est plus vide que vide.
    Et je ne suis même pas sûr que tu puisses l'éviter, même avec plusieurs autres sub new "pleines".
    ; avoir un constructeur sans argument n'a jamais été une obligation
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  5. #5
    Membre actif Avatar de ShadowTzu
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2005
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2005
    Messages : 243
    Points : 296
    Points
    296
    Par défaut
    un tableau à 2 dimensions ce défini comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public dipstickS(,) As dipstick
    'ou si tu veux
    Public dipstickS(19,19) As dipstick
    ensuite pour le constructeur de chaque classes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'si la taille n'est pas défini:
    ReDim dipstickS(19, 19)
     
    For j As Integer = 0 To dipstickS.GetUpperBound(1)
          For i As Integer = 0 To dipstickS.GetUpperBound(0)
              dipstickS(i, j) = New dipstick(0, 0)
          Next
    Next

  6. #6
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 44
    Points
    44
    Par défaut
    Merci a vous (et surtout a Sehnsucht), ça fonctionne désormais :)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] tableau de deux dimention
    Par hadjiphp dans le forum Langage
    Réponses: 1
    Dernier message: 15/06/2009, 19h38
  2. [Tableaux] Fusionner deux tableaux
    Par lodan dans le forum Langage
    Réponses: 4
    Dernier message: 09/11/2006, 13h42
  3. tableau deux dimentions
    Par tinobimbo dans le forum Flash
    Réponses: 2
    Dernier message: 18/07/2006, 13h12
  4. [VBA-E]:copier entre deux tableaux sur deux classeurs
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 39
    Dernier message: 28/06/2006, 15h39
  5. Réponses: 4
    Dernier message: 11/10/2005, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo