Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
So hatte ich es eigentlich auch, hab mich nur beim posten verhauen
Was mich noch interressieren würde:
Wenn man die Reihenfolge des Durchlaufes ändern wollte(also anstatt erst zeilen, zuerst spalten) reicht es dann aus das wie folgt zu schreiben, und bleibt die Indexvariable immer i, egal wann man die eckigen Klammern schreibt?
Naja mal abgesehn von den Semantik fehlern, dieses vorgehen klappt so nur, wenn du eine quadratische Matrix hast. Ansonsten musst noch eine Reihe von Überprüfungen machen.
ich mach mein problem glaub ich ein bisschen konkreter
Ich soll eine Klasse für ein Lager für Autos realisieren. Ein Lager besteht aus einer quadratischen Matrix. Für das Lager gibt es versch. Methoden wie z.B. einlagern(). Beim spaltenweisen durchlauf und dem ersten Auftreten eines freien Elements, soll dann das übergebene Auto gespeichert werden.
So und das ganze wollte ich mit foreach realisieren. Sieht bei mir bisher so aus, weil ichs mit foreach nich hinkrieg:
Code:
private Auto[][] matrix;
public HRLager(int zeilen, int spalten, String name) {
super(name);
beschr.kapazität = zeilen * spalten;
matrix = new Auto[zeilen][spalten];
}
public boolean einlagern(Auto neuesAuto) {
for(int j=0; j < this.matrix.length; j++) // j bezeichnet die Spaltenvariable
for(int i=0; i < this.matrix[j].length; i++) // i bezeichnet die Zeilenvariable
if (this.matrix[i][j] == null)
{
this.matrix[i][j] = neuesAuto;
beschr.füllstand++;
return true;
}
return false;
}
public Auto auslagern(int identifier) {
for(int j=0; j<matrix.length; j++)
for(int i=0; i<matrix[j].length; i++)
if (matrix[i][j].identifier == identifier)
{
Auto auszulagerndesAuto = matrix[i][j]; //Variable zum Zwischenspeichern des Autos
matrix[i][j] = null;
beschr.füllstand--;
return auszulagerndesAuto;
}
return null;
}
Und bei der methode auslagern() bekomm ich immer eine ArrayIndexOutOfBoundsException
schau dir doch mein Beispiel an.. (mein zweiter Post),
damit gehts (sofern nicht durch Testen das Gegenteil festgestellt wird ),
du benutzt was anderes, was soll man da noch sagen?
und bei einlagern hast du irgendwie genau den gleichen Code zum Durchlauf?
soll da auch das Array 'senkrecht' durchlaufen werden?
Die Lösung aus deinem 2. Post funktioniert.
Aber wann verwendet man denn besser und wann [0]? Kann man [0] immer nehmen? Ergeben sich dadurch irgendwelche Nachteile?
Habs jetz auch hinbekommen das ganze mit foreach zu schreiben.
Problem: Das Löschen des Autos aus der matrix geht nicht mehr. Hab aber nur die Schleifen verändert. ???:L
Code:
for(Auto[] a : matrix)
for(Auto b : a)
if (b != null && b.identifier == identifier)
{
Auto auszulagerndesAuto = b; //Variable zum Zwischenspeichern des Autos
b = null;
beschr.füllstand--;
return auszulagerndesAuto;
}