Partage
  • Partager sur Facebook
  • Partager sur Twitter

DeepCopy

Copie d'une référence d'un objet

    22 septembre 2021 à 13:00:31

    Bonjour a tous.

    Je rencontre quelques difficultés à réaliser un exercice en envoyé par mon prof. 
    Je doit réaliser une copie profonde de 2 classes : point et polygone (qui utilise un tableau de points)
    Je n'ai pas eu de problème pour réaliser la copie profondes des points mais lorsque je fait la copie profonde des polygone, cela me génère un NullPointerException et je n'arrive pas a savoir pourquoi.
    Voici mon code pour le polygone:
    class Polygone
        {
            public Point[] points;
    
            public Polygone(Polygone p)
            {
                for(int i = 0; i < p.points.Length; i++)
                {
                    points[i].x = p.points[i].x;
                    points[i].y = p.points[i].y;
                }
            }
    
            public Polygone(Point[] points)
            {
                this.points = points;
            }
    
        }
    Le code pour le point:
    class Point
        {
            public int x, y;
    
            public Point(Point p): this(p.x, p.y)
            {}
    
            public Point(int x, int y)
            {
                this.x = x;
                this.y = y;
            }
    
        }
    Et le main:
    class Program
        {
            static void Main(string[] args)
            {
                
                // Décomentez pour tester
    
                Point p1 = new Point(1,2);
                Point p2 = new Point(p1); // deep copy
    
                p2.x = 3;
                Debug.Assert(p1.x != p2.x, "Problème sur le constructeur par copie de Point.");
    
                Point[] points = {p1, p2};
                
                Polygone po1 = new Polygone(points);
                Polygone po2 = new Polygone(po1); // deep(er) copy
    
                po2.points[0].x = 4;
                Debug.Assert(po2.points[0].x != po1.points[0].x, "Problème sur le constructeur par copie de Polygone.");
                
    
            }
        }
    Merci d'avance pour votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2021 à 14:02:35

      Dans "new Polygone(po1);", où est initialisé le champ 'points' de l'objet en cours de création ?

      Donc à la ligne 9 du fichier de définition de la classe 'Polygone' : "points[i].x = p.points[i].x;" ; 'points' vaut null car non encore initialisé.

      Donc pan dans les dents "NullPointerException".

      Le débogueur est ami.

      EDIT suite message d'@umfred.

      -
      Edité par bacelar 22 septembre 2021 à 15:50:17

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        22 septembre 2021 à 15:43:16

        Je précise que bacelar parle du points à gauche de l'expression (même si ça peut paraitre évident).
        • Partager sur Facebook
        • Partager sur Twitter

        DeepCopy

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown