2D-Array initialisieren

Lesezeit: 3 Minuten

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.

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?

Benutzer-Avatar
Bhesh Gurung

Kürzer geht es wie folgt:

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

  • 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

Benutzer-Avatar
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()
  };

Benutzer-Avatar
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.

1204670cookie-check2D-Array initialisieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy