Initialiser une matrice

Résolu/Fermé
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 - Modifié par andredrea le 26/03/2016 à 00:22
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 - 27 mars 2016 à 01:01
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...

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

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
26 mars 2016 à 10:49
Bonjour,

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);
            }
        }
    }
}
0
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 3
26 mars 2016 à 11:34
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 !
0
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 3
26 mars 2016 à 13:14
Bon en fait le code était bon ! En fait mon application plantait à cause d'un j à la place d'un i, dans un code un peu plus haut ... Tant de reflexion pour ça !!
Merci encore,

bon week end
0
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 107
Modifié par greg6614 le 26/03/2016 à 23:00
Je tiens à préciser quand même que le
super()
sans arguments n'est pas utile car automatiquement appelé par JAVA lors d'un
extends


Également le
final
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.
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019 > greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017
26 mars 2016 à 23:49
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 comme
paint(Graphics g)
où le
super.paint(g)
est vital :-)

Quant au
final
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...
0
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 107
27 mars 2016 à 01:01
On est d'accord sur le
super()
.

Pour le
final
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 :)
0