0

ich Informatik studiere (Fernstudium) und bin verwirrt über eine „zusätzliche Informationen Frage“, die im Lehrbuch erscheint, aber die hat keine Antwort. Es geht um den linearen Suchalgorithmus und die Kurzschlussauswertung.Linear Suchen und Short Circuit Bewertung (Laufzeitfehler)

Der Algorithmus für eine lineare Suche in dem Buch geschrieben wird, wie folgt:

Zeiger = 0
während des Zeiger < LengthOfList UND Liste [pointer] = zu:
------ eine hinzufügen auf Zeiger
ENDWHILE

IF Zeiger> = LengthOfList THEN:
------- PRINT ("Item ist nicht in der Liste")
ELSE
------- PRINT (“ Artikel ist am Ort " + Zeiger)
ENDIF


In der zusätzlichen Info-Box es über Kurzschluss Auswertung spricht und wie, wenn es mehr Teile von Booleschen Operatoren den Computer verknüpft werten nur die zweite Bedingung, wenn es notwendig ist. Also bekomme ich das mit Bedingung 1 UND Bedingung 2 (bei Verwendung der Kurzschlussauswertung) Bedingung 2 wird nicht ausgewertet, wenn Bedingung 1 falsch ist.

aber dann fragt
„Können Sie die Laufzeitfehler erkennen, die auftreten können, wenn Kurzschlussauswertung nicht in der Linie im Einsatz war:

während der Zeiger < LengthOfList UND Liste [pointer] = Gesucht wurde nach "

Ich habe eine Antwort gesucht und gesucht und habe den Algorithmus auf Papier mit verschiedenen Elementen in den letzten 2 Wochen immer wieder durchgelaufen, aber ich kann einfach nicht verstehen, was der Laufzeitfehler sein könnte . Könnte jemand bitte sehen, ob sie diesen Fehler erkennen und mir erklären können? Danke vielmals.

+0

wird hier eine bestimmte Ausnahme ausgelöst? Zum Beispiel eine Null-Null-Wahrnehmung. oder ist es ein Problem mit der Ausgabe? –

Antwort

0

Ich denke, die Frage hier neu bewertet werden muss. Zuerst definieren wir die Kurzschlussauswertung. Kurzschlussauswertung ist die Verwendung von Booleschen Operatoren wie && (die AND-Operator) und || (dem OR-Operator), so dass nur eine von zwei Argumente haben aufgrund des Ergebnisses von einem Argument zu prüfen. Zum Beispiel diese Beispiele betrachten, wo A und B Bedingungen sind,

if(A && B) 

Nach Auswertung Kurzschluss, wenn A falsch ist, dann B wird nie überprüft werden müssen, da das Gesamtergebnis von A && B falsch ist, egal was für B ist und der Körper der if-Anweisung wird übersprungen.

if(A || B) 

Hier Kurzschlussauswertung nach, wenn A wahr ist, dann wird B nie da geprüft werden müssen, ist das Gesamtergebnis von A || B wahr ist, egal was B ist und der, wenn Körper Anweisung ausgeführt wird.

Nun stellt sich die Frage, was passiert, wenn die Kurzschlussauswertung NICHT verwendet wird. Die Frage ist also nur nach den Fehlern eines anders geschriebenen Algorithmus zu fragen (beachte, dass der Algorithmus, den du oben geschrieben hast, vollkommen in Ordnung ist). Im Wesentlichen welche Fehler können auftreten, wenn beide Bedingungen in der While-Schleife mit jeder Iteration überprüft werden? Weil momentan der Laufzeitfehler verhindert wird, wird in der letzten Iteration nur die erste Bedingung geprüft, um eine ArrayIndexOutOfBoundsException zu verhindern. Wenn die letzte Iteration der while-Schleife beide Bedingungen überprüft, würde ein Laufzeitfehler auftreten, weil das Programm versucht, auf ein Element zuzugreifen, das außerhalb der Grenzen des Arrays liegt.

+0

Vielen Dank für Ihre Erklärung! Es macht schließlich Sinn, dass das Programm versuchen würde, auf einen Index zuzugreifen, der nicht existiert. Geschätzt. – PyVan

+0

Jederzeit, wenn Sie die Antwort hilfreich fanden, achten Sie darauf, als akzeptiert zu markieren. Pass auf. –