Arrayfülle kontorlllieren

Taso44

Aktives Mitglied
Guten Tag,,
ich habe ein kleines Problem mit meinem Programm.
Ich würde gerne überprüfen, ob das ganze 2D-Array befüllt worden ist.
Dazu habe ich eine Methode geschrieben. Leider kommt "befüllt" auch dann raus,
wenn es nicht vollständig befüllt worden ist.
Ich bin eigentlich der Meinung, dass das Programm richtig
geschrieben wurde, aber irgendwas muss ja wohl falsch sein.
Vielen Dank für die Hilfe schonmal.
Java:
    public static void main(String[] args) {

        char[][] feld = new char[4][4];

        feld[0][0] = 'b';
        feld[0][1] = 'b';
        feld[0][2] = 'b';
        feld[0][3] = 'b';
        feld[1][0] = 'b';
        feld[1][1] = 'b';
        feld[1][2] = 'b';
        feld[1][3] = 'b';
        feld[2][0] = 'b';
        feld[2][1] = 'b';
        feld[2][2] = 'a';
        feld[2][3] = 'b';
        feld[3][0] = 'b';
        feld[3][1] = 'b';
        feld[3][2] = 'b';
        feld[3][3] = 'b';

        for (int i = 0; i < feld.length; i++) {
            for (int e = 0; e < feld[i].length; e++) {
                System.out.print(feld[i][e]);
            }
            System.out.println();
        }
        System.out.println(voll(feld));
    }
    
    public static boolean voll(char[][] feld) {
        for (int i = 0; i < feld.length - 1; i++) {
            for (int e = 0; e < feld[i].length; e++) {
                if (feld[i][e] !=0) {
                    return true;
                }
            }
        }

        return false;
    }
 

temi

Top Contributor
Die Bedingung mit der du prüfst, ob ein Feld gefüllt ist, ist bereits beim ersten gefüllten Feld erfüllt und die Methode wird beendet (mit true).

Mach das doch besser andersrum und beende mit false, sobald ein nicht befülltes Feld auftaucht. Sollten alle Felder "befüllt" sein, dann wird am Ende true zurück gegeben.
 

Taso44

Aktives Mitglied
Ja funktioniert jetzt. Danke.

Java:
    public static boolean voll(char[][] feld) {
        for (int i = 0; i < feld.length - 1; i++) {
            for (int e = 0; e < feld[i].length; e++) {
                if (feld[i][e] == 0) { // wenn array ein leeres feld hat
                    return false;
                }
            }
        }

        return true;
    }

Gibt es da aber vielleicht einen besonderen Unterschied, weil ich dreh
doch einfach nur die Bedingung um. Wieso funktioniert das eine und das
andere nicht?
 

LimDul

Top Contributor
Gibt es da aber vielleicht einen besonderen Unterschied, weil ich dreh
doch einfach nur die Bedingung um. Wieso funktioniert das eine und das
andere nicht?
Du drehst zwar in der Zeile die Bedingung um - aber insgesamt prüfst du etwas vollständig anderes.

Deine erste Methode gibt genau dann true zurück, wenn es mindestens ein Feld gibt, was gefüllt ist.
Deine zweite Methode gibt genau dann false zurück, wenn es mindestens ein Feld gibt, was nicht gefüllt ist.
 

temi

Top Contributor
Gibt es da aber vielleicht einen besonderen Unterschied, weil ich dreh
doch einfach nur die Bedingung um. Wieso funktioniert das eine und das
andere nicht?
@LimDul hat es schon erklärt, aber vielleicht noch ergänzend:

Sobald die Bedingung innerhalb der Schleife erfüllt ist, wird die Schleife abgebrochen und die Methode beendet. Das kann bereits beim allerersten Arrayelement der Fall sein.

Das Return nach der Schleife, wird nur ausgeführt, wenn die Schleife komplett durchlaufen wurde (und nicht vorher abgebrochen wurde).
 

Neue Themen


Oben