# Array übergeben und Zeichen ersetzen



## David2456 (1. Dez 2015)

Hallo,
folgendes Problem: Ich habe ein zweidimensionales Array welches einen Diamanten aus f und t erzeugt(createDiamond). Nun möchte ich in einer anderen Methode dieses Array umschreiben, sodass t mit * und f mit - ersetzt wird (printDiamond). Ich darf hierführ nur die Iteratorform der for-Schleife benutzen. Ist es jetzt so lösbar das ich die Zeichen t,f durch *,- ersetze, wenn ja wie, oder muss ich eine neue Schleife schreiben welche das selbe macht aber * und - ausgibt?

Danke schonmal


```
public class DiamondArray {

        public static void main(String[] args) {
                Out.print("Bitte geben Sie die Groesse des Diamanten ein: ");
                int size = In.readInt();
                boolean[][] diamond = createDiamond(size);
                printDiamond(diamond);
        }
      
         public static boolean[][] createDiamond(int size){
            boolean[][] diamond = new boolean[size][size - 2];
                for (int row = 0; row < size; ++row) {
                        int colWidth;
                    if (row < size / 2 + 1) {
                        colWidth = size / 2 + row + 1;
                    } else {
                        colWidth = 3 * size / 2 - row;
                    }
              
                    for(int col = 0; col < colWidth; ++col) {
                        if (col == size - colWidth || col == colWidth - 1) {
                            Out.print("t");
                        } else {
                            Out.print("f");
                        }
                    }
                    Out.println();
                }
                return diamond;
            }
       
         public static void printDiamond(){
         }
}
```


----------



## InfectedBytes (1. Dez 2015)

deine createDiamond methode soll nur das array mit true oder false füllen. Stattdessen machst du dort die ganze zeit nur ein Out.print(...)
Anstelle der out.prints musst du dem Array werte zuweisen: diamond[row][col] = true bzw. false
Und in printDiamond gehst du per Schleifen das Array durch und gibst mit Out.print eben ein * oder - aus


----------



## David2456 (2. Dez 2015)

Hallo,
danke erstmal. Ich habe diamond[row][col] = true / false jetzt eingesetzt. So nun bekomme ich aber die Fehlermeldung Array Index out of Bounds Exceptiom : 3.
Gibts es dazu eine Lösung oder ist meine Implementierung komplett falsch?

```
public class DiamondArray {
        public static void main(String[] args) {
                Out.print("Bitte geben Sie die Groesse des Diamanten ein: ");
                int size = In.readInt();
                boolean[][] diamond = createDiamond(size);
        }
    
         public static boolean[][] createDiamond(int size){
            boolean[][] diamond = new boolean[size][size - 2];
                for (int row = 0; row < size; ++row) {
                        int colWidth;
                    if (row < size / 2 + 1) {
                        colWidth = size / 2 + row + 1;
                    } else {
                        colWidth = 3 * size / 2 - row;
                    }
                    for(int col = 0; col < colWidth; ++col) {
                        if (col == size - colWidth || col == colWidth - 1) {                       
                           // Out.print("t");
                            diamond[row][col] = true;
                        } else {
                           // Out.print("f");
                            diamond[row][col] = false;
                        }
                    }
                    //Out.println();
                }
                return diamond;
            }
}
```


----------



## strußi (2. Dez 2015)

in den for-schleifen  einfach auf die größe des Arrays referenzieren. diamond.length für die äußere for-schleife und diamond[row].length, dann sollten die oobEx ausbleiben


----------



## David2456 (2. Dez 2015)

Danke dir, aber kannst du das nochmal genauer erklären?


----------



## InfectedBytes (2. Dez 2015)

dein array besteht aus *size *vielen Zeilen und *size-2* vielen Spalten. Deine Schleifen laufen aber beide von 0 bis size. Dementsprechend greifst du irgendwann auf eine Spalte zu, welche es gar nicht gibt.
Um das zu umgehen, ist es besser die schleife entsprechend der dimension zählen zu lassen.
diamond.length gibt die länge der ersten dimension (anzahl zeilen) zurück.
Anstatt also for(int i=0; i < size; i++) besser for(int i=0; i<diamond.length; i++).
Für die innere Schleife musst du entsprechend die nächste dimension benutzen: diamond[row].length


----------



## strußi (2. Dez 2015)

@InfectedBytes thx, dass du das erklärt hast
dabei ist darauf zu achten, dass die abbruchbedinung echt kleiner ist, sonst aoobEx. 
.length liefert die anzahl der Zellen zurück und nicht den größten index des Arrays
int[] bsp =new int[ 5]; .length =5, größter index =4


----------

