Je lisais un livre sur Java et suis tombé sur un exemple dans lequel un tableau de type double avait été initialisé d'une manière que je n'avais jamais vue auparavant. De quel type d'initialisation s'agit-il et où peut-il être utilisé?
double m[][]={
{0*0,1*0,2*0,3*0},
{0*1,1*1,2*1,3*1},
{0*2,1*2,2*2,3*2},
{0*3,1*3,2*3,3*3}
};
C'est syntaxe d'initialisation de tablea, et il ne peut être utilisé que du côté droit lors de la déclaration d'une variable de type tableau. Exemple:
int[] x = {1,2,3,4};
String y = {"a","b","c"};
Si vous n'êtes pas sur le RHS d'une déclaration de variable, utilisez plutôt un constructeur de tableau:
int[] x;
x = new int[]{1,2,3,4};
String y;
y = new String[]{"a","b","c"};
Ces déclarations ont exactement le même effet: un nouveau tableau est alloué et construit avec le contenu spécifié.
Dans votre cas, il pourrait être plus clair (moins répétitif, mais un peu moins concis) de spécifier le tableau par programme:
double[][] m = new double[4][4];
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
m[i][j] = i*j;
}
}
Vous pouvez initialiser un tableau en écrivant les valeurs réelles qu'il détient entre des accolades à droite, comme suit:
String[] strArr = { "one", "two", "three"};
int[] numArr = { 1, 2, 3};
De la même manière, un tableau à deux dimensions ou array-of-arrays contient un tableau sous forme de valeur, donc:
String strArrayOfArrays = { {"a", "b", "c"}, {"one", "two", "three"} };
Votre exemple montre exactement que
double m[][] = {
{0*0,1*0,2*0,3*0},
{0*1,1*1,2*1,3*1},
{0*2,1*2,2*2,3*2},
{0*3,1*3,2*3,3*3}
};
Mais aussi la multiplication de nombre sera également effectuée et son identique à:
double m[][] = { {0, 0, 0, 0}, {0, 1, 2, 3}, {0, 2, 4, 6}, {0, 3, 6, 9} };
Ce s'appelle un initialiseur de tableau et peut être expliqué dans le Javaspécification 10.6 .
Ceci peut être utilisé pour initialiser n'importe quel tableau, mais uniquement pour l'initialisation (pas d'affectation à un tableau existant). L’un des avantages uniques de ce logiciel est que les dimensions du tableau peuvent être déterminées à partir de l’initialiseur. D'autres méthodes de création d'un tableau nécessitent que vous insériez le nombre manuellement. Dans de nombreux cas, cela aide à minimiser les erreurs triviales qui se produisent lorsqu'un programmeur modifie l'initialiseur et ne parvient pas à mettre à jour les dimensions.
Fondamentalement, l’initialiseur alloue un tableau de taille correcte, puis passe de gauche à droite en évaluant chaque élément de la liste. La spécification indique également que si le type d’élément est un tableau (comme dans votre cas ... nous avons un tableau de double []), chaque élément peut lui-même être une liste d’initialisation, c’est pourquoi vous en voyez un. ensemble externe d'accolades, et chaque ligne a des accolades intérieures.
Si vous pouvez accepter des objets doubles, ce message est utile: initialisation d'une liste de tableaux sur une ligne
List<Double> y = Arrays.asList(null, 1.0, 2.0);
Double x = y.get(1);
double m[][]
déclare un tableau de tableaux, appelé tableau multidimensionnel.
m[0]
pointe sur un tableau de la taille quatre, contenant 0 * 0,1 * 0,2 * 0,3 * 0. Un calcul simple montre que les valeurs sont en réalité 0,0,0,0.
La deuxième ligne est également un tableau de la taille de quatre, contenant 0,1,2,3.
Etc...
Je suppose que ce format multiple dans votre livre était de montrer que 0 * 0 est la rangée 0 colonne 0, 0 * 1 est la rangée 0 colonne 1 et ainsi de suite.
C'est la syntaxe de raccourci pour créer et initialiser un tableau Java .
D'après mon expérience, je fais ce genre d'initialisation quand je veux des valeurs fixes dans le tableau. Je le déclare ainsi dans la classe, mais en dehors de la méthode onCreate, car cela ne me permet pas de le faire dans onCreate.