2013-09-02 15 views
20

Ich las ein Buch über Java und stieß auf ein Beispiel, in dem ein Array des Typs double in einer Weise initialisiert wurde, die ich vorher nicht gesehen habe. Welche Art von Initialisierung ist es und wo kann es sonst noch verwendet werden?Doppel-Array-Initialisierung in Java

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} 
}; 
+1

ich denke '.' in der ersten Anweisung sollte a ',' – nachokk

+0

Ihr Code wird nicht als solcher kompiliert. Der Punkt sollte ein Komma sein. – Mena

+0

Um ein Double zu definieren, muss das * char sein. char – fujy

Antwort

1

double m[][] deklariert ein Array von Arrays, so mehrdimensionales Array bezeichnet.

m[0] zeigt auf ein Array in der Größe von vier, das 0 * 0,1 * 0,2 * 0,3 * 0 enthält. Einfache Mathematik zeigt, dass die Werte tatsächlich 0,0,0,0 sind.

Zweite Zeile ist auch Array in der Größe von vier, mit 0,1,2,3.

Und so weiter ...

Ich denke, das mutiple Format in ihr Buch zu zeigen, war, dass 0 * 0 Zeile 0 Spalte 0, 0 * 1 Zeile 0 Spalte 1, und so weiter.

+0

Danke für Ihre Antwort. Ich erkenne jetzt, dass es eine ziemlich einfache Initialisierung war. – Prateek

19

Dies ist Array Initialisierungssyntax, und es kann nur auf der rechten Seite verwendet werden, wenn eine Variable des Array-Typs zu deklarieren. Beispiel:

int[] x = {1,2,3,4}; 
String y = {"a","b","c"}; 

Wenn Sie nicht auf der RHS einer Variablendeklaration sind, verwenden Sie ein Array-Konstruktor statt:

int[] x; 
x = new int[]{1,2,3,4}; 
String y; 
y = new String[]{"a","b","c"}; 

Diese Erklärungen haben genau die gleiche Wirkung: ein neues Array zugeordnet ist und konstruiert mit den angegebenen Inhalten.

In Ihrem Fall könnte es tatsächlich klarer sein (weniger repetitiv, aber etwas weniger prägnant) programmatisch die Tabelle angeben:

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; 
    } 
} 
+0

Ich fühlte die Anwesenheit eines Zen-Meisters dort. Ich sehe jetzt etwas deutlicher ;-) –

+0

Vermutlich wäre so etwas gewunden, wie man dem doppelten Doppelwort unter Verwendung der Konstruktorsyntax '\t \t double [] [] m; \t \t m = new double [] [] { \t \t \t \t neue double [] {0 * 0, 1 * 0, 2 * 0, 3 * 0}, \t \t \t \t neue double [] {0 * 1, 1 * 1 2 * 1 3 * 1}, \t \t \t \t neue double [] {0 * 2, 1 * 2, 2 * 2, 3 * 2}, \t \t \t \t neue Doppel [] {0 * 3, 1 * 3, 2 * 3, 3 * 3} \t \t}; ' –

1

Es wird ein Array-Initialisierer genannt und kann im Javaspecification 10.6 erklärt werden.

Dies kann verwendet werden, um ein beliebiges Array zu initialisieren, es kann jedoch nur für die Initialisierung verwendet werden (nicht für die Zuweisung zu einem vorhandenen Array). Eines der einzigartigen Dinge ist, dass die Dimensionen des Arrays aus dem Initialisierer bestimmt werden können. Bei anderen Methoden zum Erstellen eines Arrays müssen Sie die Nummer manuell eingeben. In vielen Fällen hilft dies, triviale Fehler zu minimieren, die auftreten, wenn ein Programmierer den Initialisierer ändert und die Dimensionen nicht aktualisieren kann.

Im Grunde reserviert der Initialisierer ein Array korrekter Größe und geht dann von links nach rechts, um jedes Element in der Liste zu bewerten. Die Spezifikation besagt auch, dass, wenn der Elementtyp ein Array ist (wie es für Ihren Fall ist ... wir haben ein Array von double []), dass jedes Element selbst eine Initialisierungsliste sein kann, weshalb Sie eine sehen äußere Reihe von Klammern, und jede Zeile hat innere Klammern.

+0

Danke für Ihre Antworten. Meine Zweifel sind jetzt klar. – Prateek

+1

["Zweifel" für den Rest von uns.] (Http://deutsch.stackexchange.com/questions/2429/can-doubt-sotimeimes-question/4183#4183) –

0

Meiner Erfahrung nach mache ich diese Art der Initialisierung, wenn ich feste Werte im Array möchte. Ich erkläre es so in der Klasse aber außerhalb onCreate Methode, da es mich nicht in onCreate machen lässt.

+0

Danke für Ihre Antwort. Meine Zweifel sind jetzt klar. – Prateek

+0

["Doubt" für den Rest von uns.] (Http://english.stackexchange.com/questions/2429/can-doubt-sotimeimes-meanquestion/4183#4183) –

0

Sie können ein Array initialisieren, indem Istwerten schreiben es wie in geschweiften Klammern auf der rechten Seite hält:

String[] strArr = { "one", "two", "three"}; 
int[] numArr = { 1, 2, 3}; 

In der gleichen Weise zweidimensionale Anordnung oder Array-of-Arrays ein Array als Wert hält, so:

String strArrayOfArrays = { {"a", "b", "c"}, {"one", "two", "three"} }; 

Ihr Beispiel zeigt, dass genau

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} 
}; 

Aber auch die Vermehrung der Zahl wird auch durchgeführt werden, und es ist das gleiche wie:

double m[][] = { {0, 0, 0, 0}, {0, 1, 2, 3}, {0, 2, 4, 6}, {0, 3, 6, 9} };