2D-Array initialisieren


72

Ich versuche, ein 2D-Array zu initialisieren, in dem der Typ jedes Elements char ist . Bisher kann ich dieses Array nur folgendermaßen initialisieren.

public class ticTacToe 
{
private char[][] table;

public ticTacToe()
{
    table[0][0] = '1';
    table[0][1] = '2';
    table[0][2] = '3';
    table[1][0] = '4';
    table[1][1] = '5';
    table[1][2] = '6';
    table[2][0] = '7';
    table[2][1] = '8';
    table[2][2] = '9';
}
}

Ich denke, wenn das Array 10 * 10 ist, ist es der triviale Weg. Gibt es eine effiziente Möglichkeit, dies zu tun?

Antworten:


27

Wie wäre es mit so etwas:

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 ab \ u0030 (von denen Sie erhalten '0') aufeinanderfolgend sind .

Der Ausdruck '1' + row * 3 + col(wo Sie variieren rowund colzwischen 0und 2einschließlich) gibt Ihnen einfach einen Charakter von 1bis 9.

Dies gibt Ihnen natürlich nicht den Charakter 10(da dies zwei Zeichen sind), wenn Sie weiter gehen, aber es funktioniert gut für den 3x3-Fall. Sie müssten die Methode zum Generieren des Array-Inhalts an diesem Punkt ändern, z. B.:

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

Vielen Dank! es funktioniert, aber warum funktioniert "(char) ('1' + row * 3 + col)"?
Justin

249

Der kürzere Weg ist wie folgt:

private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};

1
Nein, dieser Weg funktioniert in Eclipse nicht. Es erwärmt Array-Konstanten und kann nur in Initialisierern verwendet werden
Justin

2
Repariert. Es ist in die Deklarationserklärung eingegangen.
Bhesh Gurung

3
NB: Um die Antwort zu vervollständigen, wenn auf Tabelle [i] [j] verwiesen wird: Ich beziehe mich auf die erste Array-Ebene und j auf die zweite Ebene, basierend auf Null. Zum Beispiel in der aktuellen Beispieltabelle [2] [0] auf '7 '
Emmanuel Devaux

Das ist was ich brauche!!
Arsal Imam

Ich würde nach 3 und 6 brechen und es wie eine Matrix aussehen lassen.
Franklin Yu

15

Einfach zu lesen / zu tippen.

  table = new char[][] {
      "0123456789".toCharArray()
    , "abcdefghij".toCharArray()
  };

6

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 mach was bhesh gesagt hat.


Ich denke, es gibt einen Mismatch-Fehler, kann int nicht dem Typ des Char-Arrays zuweisen
Justin

2

Sie können 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 es vom Umfang Ihrer Implementierung ab. Wenn ein 2D-Array einfach auf die Werte 0 bis 9 initialisiert werden soll, ist es viel einfacher, es einfach innerhalb derselben Anweisung wie folgt zu definieren, zu deklarieren und zu initialisieren: private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};

Wenn Sie den Algorithmus erweitern möchten, ist der vorherige Code effizienter.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.