Binary Search Iterativ - Fatale Fehler in der Aufgabenstellung

goerlibe
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 24. Apr 2017 19:22

Binary Search Iterativ - Fatale Fehler in der Aufgabenstellung

Beitrag von goerlibe » 18. Jun 2017 12:59

Fehler 1
falls man auf null stößt, soll man wahlweise -1 an index 2 zurückgeben oder eine NullPointerException werfen.

In den Tests wird hier jedoch die NullPointerException erwartet!

Fehler 2
Es gibt keinen Parameter "list", der in folgendem Satz erwähnt wird, gemeint ist hier "array":
binarySearchStep liefert im Falle von null-Referenzen bei den Parametern list und element wahlweise im Rückgabewert auf Index 2 den Eintrag -1 oder wirft eine NullpointerException.

(Wie bereits erwähnt: Ihr solltet lieber die NullPointerException werfen)

Fehler 3
Satzbaufehler, Grammatik, Formatierung, falsches Englisch - Die Aufgabe ist dadurch leider sehr unverständlich. Einige Beispiele (nicht vollzählig):
  • In case that the left border has been increased it has to be set to the of the search-space middle+1.
  • If a key or data.object is not found it has to delivers -1 at index 2.
  • Es stets ein neues Array zurückgegeben werden.
  • Zeichensetzung und Leerzeichen (Nach Punkt kommt eine Leertaste, dies kommt noch an vielen anderen Stellen vor):
    Listobject[] array ist das zu durchsuchende Array. Welches stets sortiert sein muss.Listobject element ist das gesuchte Element.Int[] lrm element enthält die aktuelle linke Grenze auf Index 0, die aktuelle rechte Grenze auf Index 1 und auf Index 2 die aktuelle mittlere Position (Punkt)
  • an vielen Stellen ist das Englisch zwar nicht direkt falsch, aber doch so schlecht, dass meine Lehrerin es in der 7 Klasse unterschlängelt und mir bei Wiederholtem Vorkommen auch Punkte abgezogen hätte
Anmerkung:
Es spielt für das Bestehen der Tests außerdem eine entscheidende Rolle, ob bei Listen (bzw Listenabschnitten) mit gerader Länge das Linke oder das Rechte der beiden mittleren Elemente als Mitte betrachtet wird. Dies sollte nicht so sein, oder es sollte ausdrücklich darauf hingewiesen werden!


Ich hoffe, dieser Beitrag hilft einigen von euch, mit der Aufgabe zurechtzukommen!
Da die Tutoren wohl offensichtlich von der Menge an Verbesserugsvorschlägen und Fehlermeldungen überfordert sind (und auch nicht allzu oft ins Forum schauen), wird es sicher noch eine Weile dauern, bis auch hier nachgebessert wird...




Hier mein Code, der alle Tests besteht - Inspiriert wurde ich von der Lösung eines Kommillitonen, alleine bin ich trotz viel investierter Zeit nicht auf die Lösung gekommen (kein Wunder bei der Aufgabenstellung...)

Code: Alles auswählen

{
    if (array == null || element == null) throw new NullPointerException("null parameters");
    if (array.length == 0) return new int[]{lrm[0], lrm[1], -1};

    // result array
    int[] res = new int[3];
    res[0] = lrm[0];
    res[1] = lrm[1];
    res[2] = -1; 
    
    int middle = (lrm[0] + lrm[1]) / 2;
    
    int cmp = array[middle].compareTo(element);
    
    if (cmp == 0) {
        res[2] = middle;
        return res;
    }
    if (res[1] == middle) {
        return res;
    }
    if (cmp > 0) {
        res[1] = middle - 1;
    } else {
        res[0] = middle + 1;
    }
    res[2] = middle;
    return res;
}

LukasPhysiker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 6. Mai 2017 13:05

Re: Binary Search Iterativ - Fatale Fehler in der Aufgabenstellung

Beitrag von LukasPhysiker » 18. Jun 2017 17:42

Danke für den Code, ich habe auch schon ewig an der Aufgabe herumgerätselt! :) Genau diese Mehrdeutigkeiten haben mich bisher auch daran gehindert, die Aufgabe hinzubekommen. :evil:

Julian Prommer
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 167
Registriert: 17. Apr 2013 15:48

Re: Binary Search Iterativ - Fatale Fehler in der Aufgabenstellung

Beitrag von Julian Prommer » 19. Jun 2017 12:00

Einwände eingepflegt.
Bei nächster Gelegenheit wird eine frische Version hochgeladen.
AuD Orga

Vykyfikation
Mausschubser
Mausschubser
Beiträge: 69
Registriert: 9. Mai 2017 12:44

Re: Binary Search Iterativ - Fatale Fehler in der Aufgabenstellung

Beitrag von Vykyfikation » 26. Jun 2017 15:10

Cool, danke für den Code ich hab schon ewig daran herum getüftelt und es nicht hinbekommen. Kannst du mir nochmal bitte diese Zeile erklären, was genau die macht:

Code: Alles auswählen

   
    if (res[1] == middle) {
        return res;
    }
    
Warum soll man abbrechen wenn die obere Grenze = dem Mittelwert ist? Warum nicht, wenn die untere Grenze = dem Mittelwert ist?

Benutzeravatar
remi jeas
Erstie
Erstie
Beiträge: 11
Registriert: 18. Apr 2017 17:48

Re: Binary Search Iterativ - Fatale Fehler in der Aufgabenstellung

Beitrag von remi jeas » 26. Jun 2017 16:32

Vykyfikation hat geschrieben:
26. Jun 2017 15:10
Cool, danke für den Code ich hab schon ewig daran herum getüftelt und es nicht hinbekommen. Kannst du mir nochmal bitte diese Zeile erklären, was genau die macht:

Code: Alles auswählen

   
    if (res[1] == middle) {
        return res;
    }
    
Warum soll man abbrechen wenn die obere Grenze = dem Mittelwert ist? Warum nicht, wenn die untere Grenze = dem Mittelwert ist?
Die Mitte ist bei einem zweielementigen Array die untere Grenze ((0+1)/2 = 0), obwohl es noch ein weiteres Element zu prüfen gibt, um sicherzugehen, dass das gesuchte Objekt auch im Array enthalten ist, deshalb nimmt man da als Abbruchbedingung die obere Grenze, denn die ist nur gleich der Mitte, wenn untere und obere Grenze auf den selben Wert zeigen.

Antworten

Zurück zu „Archiv“