Ich versuche, ein 2D-Array zu initialisieren, in dem der Typ jedes Elements ist verkohlen. Bisher kann ich dieses Array nur auf folgende Weise initialisieren.
Nein, dieser Weg funktioniert nicht in Eclipse. it warms Array-Konstanten können nur in Initialisierern verwendet werden
– Justin
12. Dezember 2012 um 4:50 Uhr
Behoben. Es muss in die Deklarationsanweisung gehen.
– Bhesh Gurung
12. Dezember 2012 um 5:00 Uhr
NB : um die Antwort zu vervollständigen, wenn auf die Tabelle verwiesen wird[i][j] : i beziehe mich auf die erste Ebene des Arrays und j auf die zweite Ebene, nullbasiert .. zum Beispiel in der aktuellen Beispieltabelle[2][0] siehe ‘7’
– Emmanuel Devaux
16. August 2013 um 8:06 Uhr
Das ist was ich brauche!!
– Arsal Imam
16. Juni 2018 um 6:00 Uhr
Ich würde nach 3 und 6 brechen, sodass es wie eine Matrix aussieht.
– Franklin Yu
3. November 2018 um 2:12 Uhr
paxdiablo
Wie wäre es mit sowas:
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
table[row][col] = (char) ('1' + row * 3 + col);
Das folgende vollständige Java-Programm:
class Test {
public static void main(String[] args) {
char[][] table = new char[3][3];
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
table[row][col] = (char) ('1' + row * 3 + col);
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
System.out.println (table[row][col]);
}
}
Ausgänge:
1
2
3
4
5
6
7
8
9
Dies funktioniert, weil die Ziffern in Unicode bei \u0030 beginnend aufeinanderfolgend sind (was Sie davon bekommen '0').
Der Ausdruck '1' + row * 3 + col (wo du variierst row und col zwischen 0 und 2 inklusive) gibt Ihnen einfach ein Zeichen aus 1 zu 9.
Offensichtlich gibt Ihnen das nicht den Charakter 10 (da das ist zwei Zeichen), wenn Sie weiter gehen, aber es funktioniert gut für den 3×3-Fall. Sie müssten die Methode zum Generieren des Array-Inhalts an diesem Punkt ändern, z. B. mit etwas wie:
String[][] table = new String[5][5];
for (int row = 0; row < 5; row ++)
for (int col = 0; col < 5; col++)
table[row][col] = String.format("%d", row * 5 + col + 1);
Danke! es funktioniert, aber warum “(char) (‘1’ + row * 3 + col)” funktioniert?
– Justin
12. Dezember 2012 um 4:57 Uhr
Leicht zu lesen/tippen.
table = new char[][] {
"0123456789".toCharArray()
, "abcdefghij".toCharArray()
};
dchhetri
Sie können for-Schleife verwenden, wenn Sie wirklich wollen.
char table[][] table = new char[row][col];
for(int i = 0; i < row * col ; ++i){
table[i/row][i % col] = char('a' + (i+1));
}
oder tun, was bhesh gesagt hat.
Sie können dem folgen, was paxdiablo (am 12. Dezember) für einen automatisierten, vielseitigeren Ansatz vorgeschlagen hat:
for (int row = 0; row < 3; row ++)
for (int col = 0; col < 3; col++)
table[row][col] = (char) ('1' + row * 3 + col);
In Bezug auf die Effizienz hängt dies vom Umfang Ihrer Implementierung ab. Wenn es darum geht, ein 2D-Array einfach auf die Werte 0-9 zu initialisieren, wäre es viel einfacher, nur innerhalb derselben Anweisung wie folgt zu definieren, zu deklarieren und zu initialisieren: private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
Oder wenn Sie vorhaben, den Algorithmus zu erweitern, würde sich der vorherige Code als effizienter erweisen.