Ich versteh nicht, warum ich beim compilieren 7 IndexOutOfBounds Exceptions erhalte.
Mein Code sollte Wohldefiniert sein:
- ich schau ja zuerst, ob das Array leer ist, damit sollte array.length kein Exception werfen.
- i bleibt strikt kleiner als array.length, was mir erlaubt, auf array zuzugreifen.
- j wird nur in jeder Iteration inkrementiert und höchstens in einer Iteration um 2 erhöht, da nach dieser Iteration elemInserted true wird. Dazu ist das xtndArray 1 grösser als das eingabe Array, sprich hier darf ich auch auf xtndArray[j] zugreifen.
Ich geh natürlich davon aus, dass das Eingabearray sortiert ist, da es in der Aufgabestellung steht.
Könnt ihr mir bitte helfen?
Vielen Dank im Voraus.
Malou
Code: Alles auswählen
Listobject<T>[] array = getArray();
if(element==null){
return array;
}
// falls array leer ist, erstelle neues array 'element' als einziges
// Element des Arrays.
if(array == null){
array = new Listobject[1];
array[0] = element;
return array;
}
Listobject<T>[] xtndArray = new Listobject[array.length+1];
boolean elemInserted = false;
int j = 0;
for(int i = 0; i<array.length; i++){
if(array[i]!=null){
int cmp = array[i].compareTo(element);
// Falls das zu einfügende Element kleiner als das aktuelle
// Element der Liste ist
if(cmp >= 0){
// Falls es schon eingefügt wurde, die noch nicht eingefügte
// Werte des Arrays im neuen einfügen.
if(elemInserted){
xtndArray[j] = array[i];
}
// Ansonsten, das element im neuen einfügen.
else{
xtndArray[j] = element;
elemInserted = true;
j++;
xtndArray[j] = array[i];
}
}
else{
// Falls das einzufügendes Element grösser ist als das aktuelle,
// einfach die Werte des Arrays im neuen kopieren.
xtndArray[j] = array[i];
if(i == array.length-1){
xtndArray[j+1] = element;
}
}
j++;
}
// Falls das Array Element null ist, wird es einfach überschritten
}
return xtndArray;