Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Initialisation de tableau

13 réponses
Avatar
Pierre Maurette
Bonjour,

C'est kôr moi avec mes questions de newbie ;-)
Je dois dire que je suis assez pollué par le C (plus que le C++) et
éventuellement le Php. La question du jour est un tout petit détail,
mais la réponse devrait m'aider à mieux percevoir le langage.
Dans une classe, j'ai:

public class Case
extends Canvas {
/* .... */
private boolean[][] matrice_;
/* .... */

matrice_ est normalement initialisée dans le constructeur:

matrice_ = new boolean[7][5];

On doit parfois réinitialiser matrice_, tout à false. Je trouve ça (le
code est de mon fils, je le "corrige[*]", MDR, c'est un peu les
Aveugles dans le tableau de Bruegel !) :

[*] pas le fiston, le code ...

public void reset() {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 5; j++) {
matrice_[i][j] = false;
}
}
}

Puis-je remplacer par:

public void reset() {
matrice_ = new boolean[7][5];
}

Le fait que new initialise tout à false, je ne fait que le supposer, et
je l'ai vérifié. Est-ce garanti ?

Recréer un objet a-t-il des effets néfastes ?

Existe-t-il d'autres méthodes de "remise à zéro" ou de "mise à X"
massives ?

Merci d'avance ....

--
Pierre Maurette

3 réponses

1 2
Avatar
Cédric Olmanst
et il me semble, de plus, qu'un tableau est une classe en soi, et ce
quelle que soit sa dimension


Tu voulais peut-être dire un objet. Mais d'où te vient cette idée ? Du
fait que c'est passé par référence ?

Je ne pourrais pas jurer que ce n'est pas un objet (après tout, on
pourrait penser qu'il a une variable d'instance "length"), mais je ne
pense pas.

Quelqu'un peut confirmer ?

Cédric O.

Avatar
Hervé AGNOUX
Pierre Maurette wrote:


private static final boolean LED_ON = true;
private static final boolean LED_OFF = false;

Est-ce correct ? Le remplacement a-t-il bien lieu à la compilation et
ainsi ne grève pas l'exécution ?



Oui, mais je ne suis pas sûr que ce soit dans les spécifs de java.


Y a-t-il une solution pour définir ce type de constantes au niveau de
l'application, du package en fait ?



Il te suffit de passer tes variables final en public, et de les mettre dans
une classe ou une interface.

Mais je ne te conseille pas de procéder comme ça. Il vaut mieux essayer
d'associer des objets avec leur contenu, et de leur donner un comportement.

Donc tu aurais plutôt quelque chose du genre :

public class Led
{
public void goOn();
...
public void goOff();
...
public boolean isOn();
...
public void toogle();
}

Bon... etc...


--
Hervé AGNOUX
http://www.diaam-informatique.com

Avatar
Olivier Thomann
Est-ce correct ? Le remplacement a-t-il bien lieu à la compilation et
ainsi ne grève pas l'exécution ?
Oui, mais je ne suis pas sûr que ce soit dans les spécifs de java.

Oui c'est specifie. Je peux te chercher la reference exacte dans les

specs si tu veux.
Toute expression constante *doit* etre "inlinee" a la compilation.
--
Olivier


1 2