Werte an ein 3-dimensionales Array zuweisen

lgorse

Mitglied
Hallo,

ich programmiere noch nicht lange in Java und habe ein (scheinbar) unlösbares Problem. Ich habe ein 3-dimensionales Array my_array und will diesem Werte zuweisen:
Java:
  public void array_zuweisen() {
    int rows = 5, cols = 5;
    String[][][] my_array = new String[rows][cols][3];
    String[] n_clear = {"-", "-", "-"};


    for(int i = 0; i < rows; i++) {
      for(int j = 0; j < cols; j++) {
        my_array[i][j] = n_clear
      }
    }

    
    System.out.println("Davor: ");
    for(int i = 0; i < rows; i++) {
      for(int j = 0; j < cols; j++) {
        System.out.print("(" + my_array[i][j][0] + ";" + my_array[i][j][1] + ";" + my_array[i][j][2] + ")");
      }
      System.out.println("");
    }

    my_array[1][1][0] = "1";
    my_array[1][1][1] = "2";
    my_array[1][1][2] = "3";

    System.out.println("");
    System.out.println("Danach: ");
    for(int i = 0; i < rows; i++) {
      for(int j = 0; j < cols; j++) {
        System.out.print("(" + my_array[i][j][0] + ";" + my_array[i][j][1] + ";" + my_array[i][j][2] + ")");
      }
      System.out.println("");
    }
  }

das führt aber zur folgenden Ausgabe:
Code:
Davor: 
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)

Danach: 
(1;2;3)(1;2;3)(1;2;3)(1;2;3)(1;2;3)
(1;2;3)(1;2;3)(1;2;3)(1;2;3)(1;2;3)
(1;2;3)(1;2;3)(1;2;3)(1;2;3)(1;2;3)
(1;2;3)(1;2;3)(1;2;3)(1;2;3)(1;2;3)
(1;2;3)(1;2;3)(1;2;3)(1;2;3)(1;2;3)

ändere ich den Code jedoch folgendermaßen ab (Z. 10 - 12):
Java:
  public void array_zuweisen() {

    int rows = 5, cols = 5;
    String[][][] my_array = new String[rows][cols][3];
    String[] n_clear = {"-", "-", "-"};


    for(int i = 0; i < rows; i++) {
      for(int j = 0; j < cols; j++) {
        my_array[i][j][0] = "-";
        my_array[i][j][1] = "-";
        my_array[i][j][2] = "-";
      }
    }

    
    System.out.println("Davor: ");
    for(int i = 0; i < rows; i++) {
      for(int j = 0; j < cols; j++) {
        System.out.print("(" + my_array[i][j][0] + ";" + my_array[i][j][1] + ";" + my_array[i][j][2] + ")");
      }
      System.out.println("");
    }

    my_array[1][1][0] = "1";
    my_array[1][1][1] = "2";
    my_array[1][1][2] = "3";

    System.out.println("");
    System.out.println("Danach: ");
    for(int i = 0; i < rows; i++) {
      for(int j = 0; j < cols; j++) {
        System.out.print("(" + my_array[i][j][0] + ";" + my_array[i][j][1] + ";" + my_array[i][j][2] + ")");
      }
      System.out.println("");
    }
  }

erhalte ich die von mir gewollte Ausgabe:
Code:
Davor: 
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)

Danach: 
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(1;2;3)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)
(-;-;-)(-;-;-)(-;-;-)(-;-;-)(-;-;-)

Gibt es trotzdem eine Möglichkeit, die Zuweisung auf die 1. Art zu vollziehen oder muss ich dafür die 2. Variante nehmen?

Schonmal im voraus Vielen Dank für die Antworten,
lgorse
 
Zuletzt bearbeitet:
Liegt wohl daran, dass Du jedem Deiner Array-Elemente (eine Referenz auf) das einmal erzeugte Array-Objekt zuweist. Wenn Du dieses dann später änderst, macht sich das bei allen Referenzen bemerkbar. Du kannst also schon Variante 1 verwenden, musst aber in jedem Schleifendurchgang ein neues Array anlegen und darfst nicht recyclen ;)

Java:
  public void array_zuweisen() {
    int rows = 5, cols = 5;
    String[][][] my_array = new String[rows][cols][3];

    for(int i = 0; i < rows; i++) {
      for(int j = 0; j < cols; j++) {
        my_array[i][j] = {"-", "-", "-"};
      }
    }
   ...

Zusatz: bzw. mit einer Kopie für jeden Eintrag sollts auch funktionieren.
Java:
public void array_zuweisen() {
    int rows = 5, cols = 5;
    String[][][] my_array = new String[rows][cols][3];
    String[] n_clear = {"-", "-", "-"};
 
    for(int i = 0; i < rows; i++) {
      for(int j = 0; j < cols; j++) {
        my_array[i][j] = (String[])n_clear.clone();
      }
    }
    ...
 
Zuletzt bearbeitet:
Vielen Dank, mit dem n_clear.clone() funktioniert es. Ein neues Array erstellen, wie du es in der 1. Variante beschrieben hast, wollte ich ja nicht, da ich sonst auch alle anderen zuweisungen hätte ändern müssen.

VIelen Dank,
lgorse
 
Zurück