initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp

Cookiieee

Mitglied
Hallo, ist die Zeile 6, so richtig?
Ich habe das Programm auch schon laufen lassen, aber da steht dass da "public static void main(String [] args)" fehlt, kommt, dass dann nach "public class Framed" oder wo?

Aufgabenstellung:
Unten ist ein fast vollständiges Programm gegeben. Das Programm soll zwei Vierecke bestehend aus den Buchstaben 'A' (Rand) und 'B' (Füllung) ausgeben.

In der ersten "Doppel-Schleife" wird bereits ein Viereck ausgegeben und dabei in ein 2D-Array gespeichert. In der zweiten "Doppel-Schleife" wird dann der Inhalt dieses Arrays ausgegeben.

Die Aufgabe besteht nun lediglich darin in Zeile 6 ein Array namens "array" richtiger Größe und von geeignetem Datentyp zu initialisieren, damit das Programm fehlerfrei und wie beschrieben abläuft.


Java:
public class Framed {
    public static int breite = 6;
    public static int hoehe = 3;
   
    public static void frame() {
        //Hier soll das Array deklariert und initialisiert werden!
        for(int i = 0; i <= (hoehe+1); i++) {
            for(int j = 0; j <= (breite+1); j++) {
                if((i == 0 || j == 0) || ( i == (hoehe+1) || j == (breite+1))) {
                    System.out.print("A");
                    array[j][i] = 'A';
                }
                else {
                    System.out.print("B");
                    array[j][i] = 'B';
                }
            }
            System.out.print("\n");
        }

        System.out.print("\n---Und hier jetzt nochmal das Viereck aus dem Array---\n\n");

        for(int i = 0; i <= (hoehe+1); i++){
            for(int j = 0; j <= (breite+1); j++){
                System.out.print(array[j][i]);
            }
            System.out.print("\n");
        }
    }
}


Bearbeitetes Programm:

Java:
public class Viereck {
            public static int breite = 6;
            public static int hoehe = 3;
           
            public static void frame() {
                char[][] array = new char[breite][hoehe];
                for(int i = 0; i <= (hoehe+1); i++) {
                    for(int j = 0; j <= (breite+1); j++) {
                        if((i == 0 || j == 0) || ( i == (hoehe+1) || j == (breite+1))) {
                            System.out.print("A");
                            array[j][i] = 'A';
                        }
                        else {
                            System.out.print("B");
                            array[j][i] = 'B';
                        }
                    }
                    System.out.print("\n");
                }

                System.out.print("\n---Und hier jetzt nochmal das Viereck aus dem Array---\n\n");

                for(int i = 0; i <= (hoehe+1); i++){
                    for(int j = 0; j <= (breite+1); j++){
                        System.out.print(array[j][i]);
                    }
                    System.out.print("\n");
                }
            }
        }
 
Zuletzt bearbeitet:
Und du solltest einmal anschauen, auf welche Elemente in den Schleifen zugegriffen wird. Wie groß muss das Array dann sein?
 
Es kommen folgende Fehlermeldungen, wenn man das Programm mit der main-Methode laufen lässt:
/Viereck.java:3: error: illegal start of expression
public static int breite = 6;
^
/Viereck.java:33: error: class, interface, or enum expected
}
^
2 errors

Wie kann man sie beheben?
 
Zeig uns die ganze Datei - vermutlich ist der Code in keiner Klasse oder so ...

Und zum Posten von Code bitte den Knopf </> oberhalb des Eingabebereichs nutzen.
 
Und du solltest einmal anschauen, auf welche Elemente in den Schleifen zugegriffen wird. Wie groß muss das Array dann sein?
Also bei mir kommt für diesen Code:
Java:
public class Viereck {
    
    public static void main(String[] args) {
            public static int breite = 6;
            public static int hoehe = 3;
            
            public static void frame() {
                char[][] array = new char[breite][hoehe];
                for(int i = 0; i <= (hoehe+1); i++) {
                    for(int j = 0; j <= (breite+1); j++) {
                        if((i == 0 || j == 0) || ( i == (hoehe+1) || j == (breite+1))) {
                            System.out.print("A");
                            array[j][i] = 'A';
                        }
                        else {
                            System.out.print("B");
                            array[j][i] = 'B';
                        }
                    }
                    System.out.print("\n");
                }

                System.out.print("\n---Und hier jetzt nochmal das Viereck aus dem Array---\n\n");

                for(int i = 0; i <= (hoehe+1); i++){
                    for(int j = 0; j <= (breite+1); j++){
                        System.out.print(array[j][i]);
                    }
                    System.out.print("\n");
                }
            }
        }

Diese Fehlermeldung:
javac /tmp/ZdYi4mK5Co/Viereck.java
/tmp/ZdYi4mK5Co/Viereck.java:4: error: illegal start of expression
public static int breite = 6;
^
1 error
 
@Cookiieee die Sache ist ganz einfach:

Java:
public class Viereck {
    // Klassenattribute
    public static int breite = 6;
    public static int hoehe = 3;
            
    // main-Methode (Programmeinstiegspunkt)
    // wird beim Programmstart automatisch aufgerufen
    public static void main(String[] args) {
        frame(); // rufe frame auf
    }

    public static void frame() {
        // Dein Code.
    }
}
 
Ahh okay, jetzt verstehe ich Danke dir!! Habe das gerade auch so ergänzt und laufen lassen und da ist immer noch eine Fehlermeldung
und zwar das, weiß ehrlich gesagt nicht, was das aussagt:🙃

AAAAAAAException in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 6
at Viereck.frame(Viereck.java:16)
at Viereck.main(Viereck.java:7)

Das ist der Code:

Java:
public class Viereck {
    
            public static int breite = 6;
            public static int hoehe = 3;
            
            public static void main(String[] args) {
                frame();
            }
            
            public static void frame() {
                char[][] array = new char[breite][hoehe];
                for(int i = 0; i <= (hoehe+1); i++) {
                    for(int j = 0; j <= (breite+1); j++) {
                        if((i == 0 || j == 0) || ( i == (hoehe+1) || j == (breite+1))) {
                            System.out.print("A");
                            array[j][i] = 'A';
                        }
                        else {
                            System.out.print("B");
                            array[j][i] = 'B';
                        }
                    }
                    System.out.print("\n");
                }

                System.out.print("\n---Und hier jetzt nochmal das Viereck aus dem Array---\n\n");

                for(int i = 0; i <= (hoehe+1); i++){
                    for(int j = 0; j <= (breite+1); j++){
                        System.out.print(array[j][i]);
                    }
                    System.out.print("\n");
                }
            }
        }
 
und zwar das, weiß ehrlich gesagt nicht, was das aussagt:🙃
Die Fehlermeldung sagt, dass Du auf Index 6 eines Arrays zugegriffen hast, das nur 6 Elemente enthält. Hintergrund ist, dass der Index (nicht nur) in Java ab 0 gezählt wird. Ein Array der Größe 6 hat also Indizes von 0 bis 5. Versuchst Du auf -1 oder auf 6, 10 oder 100 zuzugreifen, bekommst Du eine ArrayIndexOutOfBoundsException (übersetzt etwa ArrayIndexAußerhalbDerGrenzenAusnahme).
 
Sorry für die vielen Fragen..
Die Fehlermeldung ist ja bei 7 und 16, was muss ich denn hinzufügen oder wegmachen um diesen Error wegzubekommen?
 
Die Fehlermeldung ist ja bei 7 und 16,
Ne, das ist ein Stack-Trace, der den Aufrufstapel anzeigt:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 6
at Viereck.frame(Viereck.java:16)
at Viereck.main(Viereck.java:7)
D. h. in Zeile 16 trat die Ausnahme in Methode frame() auf und diese Methode wurde von main aus in Zeile 7 aufgerufen.

Das Problem liegt also nur in Zeile 16:
Java:
array[j][i] = 'A';
Hier ist j oder i eben ein ungültiger Index. Schau Dir mal die Größe Deines Arrays und Deine Bedingungen in den for-Schleifen und if-Statements an.
 
Und du solltest einmal anschauen, auf welche Elemente in den Schleifen zugegriffen wird. Wie groß muss das Array dann sein?
Option 1:
Es wird in den Schleifen auf die Array Elemente i / j zugegriffen.

Daher schau einmal, bis wohin diese Schleifen zählen. Dann hast du den höchsten Index und kannst die Größe bestimmen.

Option 2:
Was genau macht der Code? Hast Du Dir da einmal überlegt? Wenn man sich die Problemdomain überlegt, dann kommt man auch auf so Dinge wie die richtige Größe.

Option 3:
Wenn man absolut keine Ahnung hat, dann könnte man einfach das Array vergrößern.
Die 6 kommt von der Breite, also erzeugt man erst einmal ein Array mit Breite 7 ...
Das ist aber natürlich die schlechteste aller Optionen. Null Verständnis, was der Code machen soll ...: null Verständnis, was der Code macht ... Korrektheit ist nur dadurch definiert, dass es keine Exception gibt.
Aber bei der Aufgabe ist auch der Ansatz möglich.
 
Nehmen wir mal Dein i:

Das läuft bis inkl. hoehe+1, Dein Array hat aber eine Größe hoehe. Wie soll das funktionieren?
Ahhhh okay jetzt verstehe ich, Dankeschööön!!!

jetzt kommt das raus...

AAAAAAA
ABBBBBB
ABBBBBB
ABBBBBB

---Und hier jetzt nochmal das Viereck aus dem Array---

AAAAAAAException in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 7 out of bounds for length 7
at Viereck.frame(Viereck.java:27)
at Viereck.main(Viereck.java:6)

Habe es auch schon korrigiert, müsste das dann nicht schon so gehen oder was mache ich wieder falsch hahah?🙃

Java:
public class Viereck {
   
            public static int breite = 6;
            public static int hoehe = 3;
            public static void main(String[] args) {
                frame();}
            public static void frame() {
                char[][] array = new char[breite+1][hoehe+1];
                for(int i = 0; i < (hoehe+1); i++) {
                    for(int j = 0; j < (breite+1); j++) {
                        if((i == 0 || j == 0) || ( i == (hoehe+1) || j == (breite+1))) {
                            System.out.print("A");
                            array[j][i] = 'A';
                        }
                        else {
                            System.out.print("B");
                            array[j][i] = 'B';
                        }
                    }
                    System.out.print("\n");
                }

                System.out.print("\n---Und hier jetzt nochmal das Viereck aus dem Array---\n\n");

                for(int i = 0; i <= (hoehe+1); i++){
                    for(int j = 0; j <= (breite+1); j++){
                        System.out.print(array[j][i]);
                    }
                    System.out.print("\n");
                }
            }
        }
 
Also ich weiss nicht, wieso ich überhaupt etwas schreibe ... 3 Optionen habe ich genannt und die interessieren Dich überhaupt nicht ...

a) Vielleicht einfach noch eins größer machen?

b) Wenn du ein Fehld mit Breite x Höhe hast und da links/rechts und oben/unten jeweils ein Feld mehr brauchst: Dann ist es jeweils +2!

c) Wenn die schleife bis einschließlich breite+1 / hoehe+1 läuft und ein Array Indizes von 0 ... size-1 hat, dann brauchst Du für ein index breite+1 ein Array der größe breite+2. Ebenso bei der hoehe.
 
Das soll ja auch so bleiben. Es war ein Fehler von ihm, an dem Code an der Stelle etwas zu ändern. Erkennt man ja auch am Inhalt in der ersten verschachtelten Schleife:
if((i == 0 || j == 0) || ( i == (hoehe+1) || j == (breite+1))) {
Wieso mein Fehler...? 😅
Der Code wurde mir so zugeteilt und ich musste, wie oben schon beschrieben nur die 6.Zeile erstellen und somit wäre das Programm fertig..
 
in #1 war es noch:
Java:
    public static void frame() {
        //Hier soll das Array deklariert und initialisiert werden!
        for(int i = 0; i <= (hoehe+1); i++) {
            for(int j = 0; j <= (breite+1); j++) {

in #19 war es dann:
Java:
            public static void frame() {
                char[][] array = new char[breite+1][hoehe+1];
                for(int i = 0; i < (hoehe+1); i++) {
                    for(int j = 0; j < (breite+1); j++) {

Du hast also nicht nur den Kommentar ersetzt sondern Du hast auch aus den beiden <= ein < gemacht. Und genau das sollst Du eben nicht machen, sondern lediglich (wie Du richtig geschrieben hast):
wie oben schon beschrieben nur die 6.Zeile erstellen
 

Neue Themen


Zurück
Oben