Constructeur par recopie pour Tableau

Constructeur par recopie pour Tableau - Java - Programmation

Marsh Posté le 07-01-2007 à 15:22:30    

Bonjour,
Je ne comprend pas pourquoi mon constructeur par recopie fonctionne pas. Le but est de recopier tout simplement le tableau de la classe GrilleCaractere. Si je pouvais avoir une petite explication aussi sur les constructeur par recopie car je crois que j'ai pas bien dût comprendre le cours. Merci Beaucoup  :??:  
 

Code :
  1. class GrilleCaractere
  2. {
  3. private char tab[][];
  4. private int largeur, hauteur;
  5. private char caractere;
  6. public GrilleCaractere ()
  7. {
  8.  int cptLargeur, cptHauteur;
  9.  cptLargeur=0;
  10.  cptHauteur=0;
  11.  largeur=8;
  12.  hauteur=5;
  13.  tab=new char[hauteur][largeur];
  14.  while(cptLargeur<largeur)
  15.  {
  16.   cptHauteur=0;
  17.   while(cptHauteur<hauteur)
  18.   {
  19.    tab[cptHauteur][cptLargeur]='-';
  20.    cptHauteur++;
  21.   }
  22.   cptLargeur++;
  23.  }
  24. }
  25. public GrilleCaractere (GrilleCaractere tab)
  26. {
  27.  int cptLargeur, cptHauteur;
  28.  cptLargeur=0;
  29.  cptHauteur=0;
  30.  tab=new GrilleCaractere();
  31.  largeur=tab.largeur;
  32.  hauteur=tab.hauteur;
  33.  System.out.println(largeur);
  34.  while(cptLargeur<largeur)
  35.  {
  36.   while(cptHauteur<hauteur)
  37.   {
  38.    this.tab[cptHauteur][cptLargeur]=tab[cptHauteur][cptLargeur];
  39.    cptHauteur++;
  40.   }
  41.   cptLargeur++;
  42.  }
  43. }

Message cité 1 fois
Message édité par CMGrille88 le 07-01-2007 à 15:24:10
Reply

Marsh Posté le 07-01-2007 à 15:22:30   

Reply

Marsh Posté le 07-01-2007 à 15:35:22    

t'es sûr de ce qui se passe à la ligne 35?  c'est bien this.tab que tu réinitialise ? Pour éviter les confusions, tu pourrais renommer le paramètre de la méthode déclarée à la ligne 29..
 
D'autre part je comprends pas tellement pourquoi tu as des boucles while et pas des boucles for pour parcourir le tableau

Reply

Marsh Posté le 07-01-2007 à 15:43:04    

CMGrille88 a écrit :

Bonjour,
Je ne comprend pas pourquoi mon constructeur par recopie fonctionne pas.


ah ?

 

ça existe en java ça ?  [:autobot]
Pour moi, c'est un constructeur comme un autre...

 


sinon le problème est que tu n'alloue pas de mémoire pour ton tableau dans ton second constructeur.
edit : ouhla, apres reetude du code, leonhard a raison, c'est un peu la merde tes tab de tab de tab :D
edit 2 :

Code :
  1. tab=new GrilleCaractere();


ça n'a aucun sens

 

Si tu parle tu tab que tu passe en parametre, tu flingue l'objet que tu passe en paramètre, c'est pas très sympa pour celui qui appelle la fonction et qui après perd son objet...

 

si tu parle du membre tab[][], c'est pas très sympa pour le compilateur car le char[][] est un type incompatible avec GrilleCaractere

 

et la méthode clone() permet de faire une copie d'un objet (pour information)


Message édité par zapan666 le 07-01-2007 à 15:47:40

---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 07-01-2007 à 15:52:54    

Concrètement faut que je fasse comment sans utiliser de clone?
Merci

Reply

Marsh Posté le 07-01-2007 à 15:56:11    

Code :
  1. public GrilleCaractere (final GrilleCaractere tab)
  2.         {
  3.          
  4.            
  5.             largeur=tab.largeur;
  6.             hauteur=tab.hauteur;
  7.            this.tab = new char[largeur][hauteur];
  8.             for ( int x = 0 ; x < this.tab.length ; x++)
  9.             {
  10.                 for ( int y = 0 ; y < this.tab.length ; y++)
  11.                 {
  12.                     this.tab[x][y]=tab[x][y];
  13.                    
  14.                 }
  15.                
  16.             }   
  17.         }


Message cité 1 fois
Message édité par zapan666 le 07-01-2007 à 15:56:40

---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 07-01-2007 à 16:06:06    

zapan666 a écrit :

Code :
  1. public GrilleCaractere (final GrilleCaractere tab)
  2.         {
  3.          
  4.            
  5.             largeur=tab.largeur;
  6.             hauteur=tab.hauteur;
  7.            this.tab = new char[largeur][hauteur];
  8.             for ( int x = 0 ; x < this.tab.length ; x++)
  9.             {
  10.                 for ( int y = 0 ; y < this.tab.length ; y++)
  11.                 {
  12.                     this.tab[x][y]=tab[x][y];
  13.                    
  14.                 }
  15.                
  16.             }   
  17.         }



 
Merci bocou

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed