Hinweis zum Programmfragment zur Aufgabe 23
Wie schon mehrfach betont, ist das Beispielprogramm "Palindrome1.java",
das es in Aufgabe 23 zu verbessern gilt, bewußt mit typischen
Fallstricken im Umgang mit Arrays versehen.
An zwei Stellen wird in diesem Programm von der Variablen "length" die -1
subtrahiert. Eine dieser Subtraktionen umgeht vermeintlich(!)
eine dieser Fallstricke.
Da in diesem Zusammenhang eben in den Übungen Verwirrung aufgekommen
ist, gibt es hier noch mal kurz die Erklärung für die beiden
Subtraktionen:
- Das erste Mal (
length = pos - 1;
) wird der Zähler
deshalb um eins reduziert, weil es in der While-Schleife zuvor einen
zu hoch gezählt wurde. (Zum Verständnis am besten mal
Aufmalen!)
- Der zweite Abzug von -1 in der if-Bedingung in der FOR-Schleife
(
if (charArray[i] != charArray[length-i-1])
)
ist deshalb dort, weil wir davon ausgehen, daß die Eingabe mit
\n
und CTRL-D
beendet wurde. Daher ist
das letzte Zeichen im Array das \n
, das wir hier von
der Bewertung ausnehmen
Selbstverständlich geht das schief, wenn wir die Eingabe mit der
zweifachen Eingabe von CTRL-D
beenden.
Aber wie gesagt: Das Programm ist absichtlich mit diesen Fallstricken
versehen, da diese typisch für Arrays sind. Die Aufgabe besteht
ja gerade daraus, diese Probleme zu eliminieren.
Damit keine Verwirrung aufkommt, habe ich die Kommentare in diesem
Programmfragment nochmals etwas ausführlicher gemacht.
nh - 01/2006