Initialiser une matrice
Résolu
andredrea
Messages postés
227
Date d'inscription
Statut
Membre
Dernière intervention
-
greg6614 Messages postés 592 Date d'inscription Statut Membre Dernière intervention -
greg6614 Messages postés 592 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
ma question est probablement élémentaire mais je ne trouve pas la réponse.
J'essaye d'initialiser une matrice d'entiers dans le constructeur d'une classe, tout en passant la matrice en attribut de classe.
Or je n'y arrive pas.
Je sais initialiser une matrice en définissant les éléments en meme temps que celle ci ( int lesBtns[][] ={blabla} )
mais j'ai besoin de l'initialiser dans le constructeur avec des for car les éléments sont nombreux.
Comment faire ? Merci
UPDATE: J'ai vu des explications à propos des matrices d'int que j'ai tenté d'appliquer pour mon cas ( matrice d'objet en fait) sauf que ca ne marche pas...
ma question est probablement élémentaire mais je ne trouve pas la réponse.
J'essaye d'initialiser une matrice d'entiers dans le constructeur d'une classe, tout en passant la matrice en attribut de classe.
Or je n'y arrive pas.
Je sais initialiser une matrice en définissant les éléments en meme temps que celle ci ( int lesBtns[][] ={blabla} )
mais j'ai besoin de l'initialiser dans le constructeur avec des for car les éléments sont nombreux.
Comment faire ? Merci
UPDATE: J'ai vu des explications à propos des matrices d'int que j'ai tenté d'appliquer pour mon cas ( matrice d'objet en fait) sauf que ca ne marche pas...
public class Jeu extends JFrame { public UneImage lesBtns[][]; public Jeu() { this.lesBtns = new UneImage[10][4]; int i,j; for (j=0;j<this.lesBtns.length;j++){ for (i=0;i<this.lesBtns[j].length;i++){ this.lesBtns[j][i]= new UneImage(this,1,1); } } } }
A voir également:
- Initialiser une matrice en c
- Impossible d'initialiser le périphérique prn ✓ - Forum Autoit / batch
- Impossible d'initialiser le dispositif d'affichage lol - Forum jeux en ligne
- Impossible d'initialiser le dispositif d'affichage - Forum jeux en ligne
- Impossible initialiser disque dur redondance cyclique - Forum Disque dur / SSD
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
1 réponse
Bonjour,
Comment le constructeur
Remarques :
Comment le constructeur
UneImage(Jeu, int, int)utilise
this?
Remarques :
- autant que possible il faut limiter la visibilité des attribut d'une classe
- this est optionnel dans la plupart des cas
- ne pas oublier l'appel au constructeur de la superclasse (JFrame ici)
public class Jeu extends JFrame { private final UneImage lesBtns[][]; public Jeu() { super(); int width = 10, height = 4; lesBtns = new UneImage[width][height]; for (int j=0; j<width; j++) { for (int i=0; i<height; i++) { lesBtns[j][i] = new UneImage(this, 1, 1); } } } }
UneImage est une sous classe d'un Jbutton donc j'appelle this pour que quand j'appuie sur le bouton UneImage, une fonction de this soit executée.
(Quand j'initialise tout en une fois dans la déclaration de l'attribut avec les {} ça fonctionne.)
En effet j'avais oublié le super() mais ça ne change rien !
Merci encore,
bon week end
Également le n'est pas forcément utile ici car il ne fait que forcer le tableau à avoir une référence unique et une affectation dans le constructeur. Il pourrait alors compliqué de faire des opérations dans une suite éventuelle du programme.
Quant au il est intéressant de le mettre par défaut et de ne l'enlever que si on a vraiment besoin de changer l'objet référencé (ce qui n'aurait pas de sens ici). En plus ça permet de garantir qu'il est bien initialisé dans tout les constructeurs (la compilation plante si on l'oublie) ce qui évite de se retrouver avec un NullPointer...
Pour le je préfère justement faire l'inverse, c-à-d l'ajouter si je suis sûr de ne jamais modifier l'objet référencé. Cela étant il n'y a pas vraiment de bonne ou mauvaises façons mais beaucoup d'habitudes tenaces je dirai :)