2D Array von hinten spaltenweise auslesen mit stop kriterium

cartilage

Grünschnabel
Hallo,

ich habe ein 2D Array erstellt welches komplett mit Nullen gefüllt ist, bis auf einige Stellen, welche 1en beinhalten. Nun möchte ich von hinten dieses 2D Array nach eben dieser Zahl durchsuchen und als Rückgabewert den Spaltenindex erhalten in dem die 1 das erste mal auftaucht.

Mein Code lautet wie folgt:

for(int k=19; k>0; k--){
for(int l=2; l>0; l--){
if(tabelle[l][k] == 1){
vorhanden = k;
break;
}

}
}

Wie ihr euch denken könnt, wende ich mich hier ans Forum, weil das nciht funktioniert :(

Habt ihr Ideen woran das liegt?

Beste Grüße
 
Hi und willkommen hier im Forum

Den Code bitte in die Code- oder Java-Tags (siehe meine Signatur), das erhöht die Lesbarkeit.

Schreib das ganze doch in eine Methode, z.B. so:
Java:
	private static int getColumnWithContent(int[][] tabelle) {
		for (int k = tabelle.length - 1; k >= 0; k--) {
			for (int l = tabelle[k].length - 1; l >= 0; l--) {
				if (tabelle[l][k] == 1) {
					return k;
				}
			}
		}
		return -1;
	}

Das Problem war vermutlich, weil du in deinen for-Schleifen nur bis 1 (k und l > 0) herunter gezählt hast, so wird jeweils die erste Zeile und die erste Spalte ignoriert.
 
Der Fehler wird darin gelegen haben das er aus der inneren for() zwar BREAK; aufgerufen hat, diese aber die äußere for() nicht mitbekommt da BREAK; soweit ich weis nur die aktuelle Ebene abbricht, nicht aber eventuelle übergeordnete.
 
Danke für die schnelle Antwort. Das mit den Code Tags werde ich beachten.

Irgendwie funktioniert die Sache immer noch nicht, wobei es dann wohl woanders liegen muss. Könnte es ein Problem sein, dass ich diese Suche wiederum im Rahmen einer for Schleife ausführe?
So langsam gehen mir die Ideen aus... :)
 
Danke für diesen Hinweis Spike, ich habe einfach eine zweite If Bedingung eingebaut, welche dann wiederum einen break durchführt. Nun geht es. Sicher nicht die schönste Variante, aber das passt erstmal.
 
Was ich noch anmerken möchte ist das hier ein großer Fehler vorliegt

Deinem Code nach läuft die äußere for() mit dem int k.
Die innere aber mit dem int l.
Allerdings rufst du das aktuelle Element mit [l][k] ab ... also genau falschherum.

Diesen Fehler hat genodeftest leider kopiert.
Natürlich kann es nicht funktionieren wenn du die Länge der ersten Dimension für das Objekt der 2ten Dimension verwendest und umgekehrt.

@genode
Das müsste du doch eigentlich gemerkt haben wenn du die innere for() mit array[k] initialisiest und dann auf array[l][k] zugreifst ...
Typischer TYPO =D
 

Neue Beiträge

Zurück