Informatik-Lexikon Fehler beim Programmieren Es gibt beim Programmieren fünf Arten von Fehlern: Lexikalische Fehler Ein lexikalischer Fehler liegt dann vor, wenn Sie bei der Eingabe von Java-Befehlen einen Rechtschreibfehler machen, z.B. wenn Sie statt "while" das Wort "uwail" eingeben, weil Sie keine Ahnung von Englisch haben. Oder wenn Sie statt "vor()" den Befehl "Vor()" eingeben. Java unterscheidet ganz streng zwischen Klein- und Großschreibung. Syntaktische Fehler Ein syntaktischer Fehler ist so etwas wie ein Grammatikfehler. Alle Worte sind zwar geschrieben zwar richtig, dennoch Satzbau ist der falsch. Semantische Fehler Das ist jetzt schon etwas komplizierter zu erklären. Wenn Sie in einer Programmiersprache eine Variable verwenden und haben diese Variable vorher gar nicht deklariert, dann ist das ein semantischer Fehler. Lexikalisch und syntaktisch ist alles korrekt - aber die Variable existiert noch gar nicht. Denken Sie einfach an den deutschen Satz "Die Katze wird von der Tischdecke gefressen". Lexikalisch ist hier alles richtig, syntaktisch ebenfalls - aber Tischdecken können keine Katzen fressen. Laufzeitfehler Sie haben ein Programm geschrieben, keine Tippfehler gemacht, die Syntax ist in Ordnung, und alle Variablen sind korrekt deklariert - das Programm ist also frei von lexikalischen, syntaktischen und semantischen Fehlern, es wird daher problemlos kompiliert. Der Compiler kann nämlich nur die ersten drei Typen von Fehlern erkennen und melden. In Ihrem Programm kommt folgende Zeile vor: x = y / z; Die Variable y soll durch die Variable z dividiert werden, und das Ergebnis soll der Variablen x zugewiesen werden. Das Programm funktioniert einwandfrei, bis eines Tages der Benutzer des Programm für z den Wert 0 eingibt. Da man nicht durch 0 dividieren kann, stürzt das Programm ab und meldet einen Laufzeitfehler. Ein typischer Laufzeitfehler aus der Hamster-Programmierung: Wenn der Hamster ein Korn aufnehmen soll, aber kein Korn auf dem Feld liegt. Ein anderer Laufzeitfehler, der typisch ist für den Hamstersimulator: Der Hamster soll vorwärts gehen, steht aber vor einer Mauer. Logische Fehler Laufzeitfehler werden zwar nicht vom Compiler entdeckt, fallen aber auf, wenn das Programm abstürzt. Logische Fehler führen meistens nicht zu einem Programmabsturz, sondern nur zu völlig falschen Ergebnissen. Ein ganz einfacher Fall: Sie sollen ein Programm schreiben, dass den Hamster dreimal vorwärts gehen lässt, damit er dann ein Korn aufnimmt. In dem Territorium liegen auf allen Feldern, mit denen der Hamster in Berührung kommt, mindestens drei Körner. Sie tippen folgende Zeilen ein: vor(); vor(); nimm(); Das Programm enthält weder lexikalische, syntaktische oder semantische Fehler noch einen Laufzeitfehler. Trotzdem tut das Programm nicht das, was es eigentlich soll, weil Sie einen simplen logischen Fehler eingebaut habe: Der Hamster geht nicht dreimal vor, sondern nur zweimal. Gut - das war ein ziemlich blödes Beispiel. Normalerweise entdeckt man logische Fehler nicht so schnell, sondern muss ziemlich lange suchen, bis einem nach vielen erfolglosen Versuchen plötzlich die Erleuchtung kommt, warum das Programm nicht funktioniert. Ein anderes Beispiel: Sie wollen einen Programmteil schreiben, der die Zahlen 1 bis 10 addiert und tippen jetzt summe = 0; for (int i = 1; i <= 10; i++) summe = summe + i; Das Programm gibt aber nicht wie erwartet die Zahl 55 aus, sondern 66. Sie hätten nämlich nicht i <= 10 schreiben dürfen, sondern stattdessen i < 10, was ja nicht dasselbe ist.