Array übergeben und Zeichen ersetzen

David2456

Aktives Mitglied
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

Java:
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(){
         }
}
 
Zuletzt bearbeitet von einem Moderator:

InfectedBytes

Top Contributor
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

Aktives Mitglied
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?
Java:
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;
            }
}
 
Zuletzt bearbeitet von einem Moderator:

strußi

Top Contributor
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
 

InfectedBytes

Top Contributor
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

Top Contributor
@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
 

Neue Themen


Oben