Initialiser une matrice
Résolu
andredrea
Messages postés
278
Statut
Membre
-
greg6614 Messages postés 629 Statut Membre -
greg6614 Messages postés 629 Statut Membre -
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);
}
}
}
}
1 réponse
-
Bonjour,
Comment le constructeurUneImage(Jeu, int, int)
utilisethis
?
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); } } } }-
Bonjour, merci pour l'aide !
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 ! -
-
Je tiens à préciser quand même que le
super()
sans arguments n'est pas utile car automatiquement appelé par JAVA lors d'unextends
Également lefinal
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.- Je suis d'accord pour le
super()
, j'ai tendance à le rajouter quand je fais du Swing pour ne pas l'oublier dans des méthodes commepaint(Graphics g)
où lesuper.paint(g)
est vital :-)
Quant aufinal
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...
-