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

C

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:
kneitzel

kneitzel

Top Contributor
Und du solltest einmal anschauen, auf welche Elemente in den Schleifen zugegriffen wird. Wie groß muss das Array dann sein?
 
Lion.King

Lion.King

Mitglied
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?
 
kneitzel

kneitzel

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

Cookiieee

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

thecain

Top Contributor
Zähl doch mal die öffnenden und schliessenden Klammern...

Und methoden kann man nicht in der main anlegen...
 
C

Cookiieee

Mitglied
Vielleicht eine etwas blöde Frage, aber muss ich jetzt das " public static void main(String[] args) {" wegmachen oder wie ist das gemeint...?
Also da du ja meintest dass man Methoden nicht in der main anlegen kann...
Zähl doch mal die öffnenden und schliessenden Klammern...

Und methoden kann man nicht in der main anlegen...
 
T

thecain

Top Contributor
Nein, du sollst deine andere Methode nicht innerhalb der main Methode schreiben.
 
mihe7

mihe7

Top Contributor
@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.
    }
}
 
C

Cookiieee

Mitglied
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");
                }
            }
        }
 
mihe7

mihe7

Top Contributor
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).
 
C

Cookiieee

Mitglied
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?
 
mihe7

mihe7

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

kneitzel

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

Cookiieee

Mitglied
Vielleicht muss das Array ein bisschen größer sein, weil mit breite und hoehe ohne Rand gemeint ist, mal so als Hinweis.
Was meinst du mit größer?😅Also an sich musste ich ja in der Zeile 6 nur etwas schreiben, dann wäre das Programm fertig, verstehe nur nicht was der Fehler ist...
 
C

Cookiieee

Mitglied
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");
                }
            }
        }
 
kneitzel

kneitzel

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

kneitzel

Top Contributor
In 25 und 26 hast Du noch ein <= statt eines <.
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))) {
 
C

Cookiieee

Mitglied
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..
 
kneitzel

kneitzel

Top Contributor
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
I Wo am besten eine String Konstante initialisieren? Java Basics - Anfänger-Themen 5
X Attribut initialisieren Java Basics - Anfänger-Themen 1
M Deklarieren und Initialisieren von Arrays Java Basics - Anfänger-Themen 3
Dawinartor Erste Schritte Statisch, Initialisieren, Deklarieren, ... Java Basics - Anfänger-Themen 1
L Variable in If-Statement initialisieren Java Basics - Anfänger-Themen 4
C Verschachteltes Array initialisieren Java Basics - Anfänger-Themen 6
D Vektoren Initialisieren Java Basics - Anfänger-Themen 1
D Boolean Array initialisieren Java Basics - Anfänger-Themen 4
T Mehrdimensionale Arrays mit geschachtelter for-Schleife initialisieren Java Basics - Anfänger-Themen 14
J Array ausserhalb der Methode initialisieren Java Basics - Anfänger-Themen 4
b1ck Integer initialisieren bei do-while-Schleife Java Basics - Anfänger-Themen 11
M Java Arrays mit Werten initialisieren Java Basics - Anfänger-Themen 3
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
V Tastatur initialisieren JFrame Probleme Java Basics - Anfänger-Themen 6
L Arrays richtig initialisieren Java Basics - Anfänger-Themen 1
W Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren Java Basics - Anfänger-Themen 2
B Rekursion - Variable initialisieren Java Basics - Anfänger-Themen 2
T Variable deklarieren, ohne zu initialisieren... Java Basics - Anfänger-Themen 3
M Objekt Array an konstruktor übergeben und Initialisieren Java Basics - Anfänger-Themen 1
K Objekte im Konstruktor initialisieren Java Basics - Anfänger-Themen 3
CyberFish initialisieren, obwohl es gemacht wurde! Bitte um Hilfe Java Basics - Anfänger-Themen 10
K Array mit Double initialisieren Java Basics - Anfänger-Themen 10
J statische Methoden auf eine LinkedList initialisieren? Java Basics - Anfänger-Themen 5
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
J StringBuilder initialisieren und Löschbefehl Java Basics - Anfänger-Themen 20
M Mehrdimensionales Array initialisieren Java Basics - Anfänger-Themen 3
DerGroßeNargus Doppelte Liste initialisieren Java Basics - Anfänger-Themen 2
R Sehr einfache möglichkeit ArrayList oder Array zu initialisieren? Java Basics - Anfänger-Themen 8
N Mit Kontrukor der Oberklasse lokale Variable initialisieren Java Basics - Anfänger-Themen 2
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
S Mehrdimensionales Char-Array initialisieren Java Basics - Anfänger-Themen 17
S mögliche Fehler beim Initialisieren von Variablen Java Basics - Anfänger-Themen 19
C Zweidimensionales String Array initialisieren Java Basics - Anfänger-Themen 2
D List<String[]> initialisieren Java Basics - Anfänger-Themen 4
D Problem mit Objekten Vererbung deklarieren initialisieren usw Java Basics - Anfänger-Themen 12
B Arrays initialisieren Java Basics - Anfänger-Themen 2
S Variable Initialisieren, aber wo? Java Basics - Anfänger-Themen 36
Y Array initialisieren, nach der Abfrage? Java Basics - Anfänger-Themen 3
K Datentypen Globale Variable direkt initialisieren oder im Konstruktor? Java Basics - Anfänger-Themen 13
N ARRAY initialisieren Java Basics - Anfänger-Themen 5
T Mehrere Variablen gleichzeitig initialisieren Java Basics - Anfänger-Themen 2
F Dreidimensionales Array? Wie initialisieren? Java Basics - Anfänger-Themen 5
Forlan OutputStream Initialisieren Java Basics - Anfänger-Themen 4
Ham Verhalten beim Initialisieren von Arrays Java Basics - Anfänger-Themen 16
N Initialisieren einer zufälligen Matrix Java Basics - Anfänger-Themen 12
A log4j - wie kann ich im Quellcode initialisieren statt in der properties-Datei? Java Basics - Anfänger-Themen 2
G Variablen initialisieren vor super() Java Basics - Anfänger-Themen 8
J ArrayLists initialisieren Java Basics - Anfänger-Themen 21
S Array initialisieren Java Basics - Anfänger-Themen 8
MQue ArrayList initialisieren Java Basics - Anfänger-Themen 17
G GUI in main Initialisieren Java Basics - Anfänger-Themen 15
M 2d string array initialisieren ohne neu String Java Basics - Anfänger-Themen 3
B Variable mit Methode initialisieren Java Basics - Anfänger-Themen 11
A char variable deklarieren und nicht initialisieren Java Basics - Anfänger-Themen 10
S statische variable initialisieren mit exception Java Basics - Anfänger-Themen 2
W Feld von boolean in main initialisieren. Java Basics - Anfänger-Themen 4
G Konstante im Konstruktur initialisieren Java Basics - Anfänger-Themen 8
G ArrayList initialisieren Java Basics - Anfänger-Themen 25
M Zweidimensionales String-Array initialisieren Java Basics - Anfänger-Themen 6
O String global initialisieren Java Basics - Anfänger-Themen 5
B ArrayList mit Startwerten initialisieren Java Basics - Anfänger-Themen 8
V Zweidimensionalen Array initialisieren Java Basics - Anfänger-Themen 3
G String Array initialisieren Java Basics - Anfänger-Themen 4
R Klassenvariable initialisieren Java Basics - Anfänger-Themen 9
A String als Nullstring initialisieren Java Basics - Anfänger-Themen 2
F double[][] initialisieren Java Basics - Anfänger-Themen 9
G Arrays initialisieren Java Basics - Anfänger-Themen 8
M Wann ist initialisieren sinnvoll? Java Basics - Anfänger-Themen 4
G Wie Array initialisieren? Java Basics - Anfänger-Themen 10
H HashMap initialisieren<Key, Value>? Java Basics - Anfänger-Themen 9
N Feld initialisieren Java Basics - Anfänger-Themen 9
M 2-dimensionales Array initialisieren Java Basics - Anfänger-Themen 5
W 50 Variablen in Schleife initialisieren Java Basics - Anfänger-Themen 6
S String mit Konstruktor (per Übergabe) initialisieren Java Basics - Anfänger-Themen 10
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
C Überprüfen eines Programms auf Syntaxfehler Java Basics - Anfänger-Themen 3
S Wie kann ich den Bereich eines Integers begrenzen? Java Basics - Anfänger-Themen 2
nonickatall Grundsätzliches Verständnisproblem des Aufbaus eines Programms Java Basics - Anfänger-Themen 19
B Downgrade eines bestehenden Projektes Java Basics - Anfänger-Themen 5
amelie123456 Geschwindigkeit der Methode bewegeDich eines Objekts ändern Java Basics - Anfänger-Themen 2
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
Z Rückgabe eines Values in umgekehrte richtung Java Basics - Anfänger-Themen 5
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
eleonori Durchschnitt aller Werte eines Baums berechnen Java Basics - Anfänger-Themen 5
M Benutzereingabe eines Codes verbessern Java Basics - Anfänger-Themen 3
B Modulo-Operator anhand eines Beispieles erklären Java Basics - Anfänger-Themen 7
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Wie kann ich Versionen eines Projektes in Eclipse erstellen? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben