Codemonkeys: executeInsertElementInArray

Bei Postings zu Algorithmus X lassen Sie Ihren Betreff bitte mit
"X: " beginnen, bei allgemeinen Postings zu Nabla bitte mit "Nabla: ", jeweils gefolgt von einer möglichst präzisen Überschrift, danke!

Moderator: Algorithmen und Datenstrukturen

Forumsregeln
Bei Postings zu Algorithmus X lassen Sie Ihren Betreff bitte mit
"X: " beginnen, bei allgemeinen Postings zu Nabla bitte mit "Nabla: ", jeweils gefolgt von einer möglichst präzisen Überschrift, danke!
Benutzeravatar
Malou
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 19. Jun 2016 17:54

Codemonkeys: executeInsertElementInArray

Beitrag von Malou » 14. Sep 2016 15:01

Hilfe!
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;

Zurück zu „AuD: Arbeit mit Nabla“