Kann mir jemand bei dem Java Code helfen?
Mein Java Code funktioniert nicht so wie ich es gerne möchte, und zwar will ich testen, ob es sich bei einem Wort um ein Palindrom handelt (ein Wort das vorwärts wie rückwärts gelesen identisch ist). Dabei sind die einzelnen Buchstaben des Wortes in ein Array mit dem Variablenname "wort" geschrieben.
Falls das Worte in Palindrom ist, soll ein true ausgegeben werden, andernfalls ein false.
3 Antworten
Du denkst viel zu kompliziert: Eine einzige nicht passende Stelle reicht, damit wort kein Palindrom ist. Du kannst dann eigentlich sofort mit „return false“ abbrechen.
Deine Hilfsvariablen a und j machen Deinen Code wirklich zur Knobelaufgabe. Ich denke, dass er funktionieren wird, wenn Du anfangs j=true initialisierst (als Annahme: „wort ist ein Palindrom“).
In der Schleife musst Du j=false setzen, sobald ein Zeichenpaar nicht mehr passt. Dann ist die Annahme nämlich falsch und kann auch bei weiteren Vergleichen nicht mehr richtig werden. Dein j=true in der Schleife ist deshalb grundsätzlich falsch, was hier aber nichts macht, weil diese Zeile nie ausgeführt wird.
Ich verstehe nicht warum du in der Schleife nach "a == i" vergleichst und die Variable j setzt. Kann man das nicht wenn man mit der Schleife fertig ist und man vergleicht dann einfach ob es mit der halbe Länge des Wortes übereinstimmt.
Und in der Schleife musst du wahrscheinlich nur bis zur Hälfte des Wortes gehen.
also ich hab festgestellt dass ich statt "a==i", "(wort.length - a) == i" setzten muss aber irgendwie geht es immer noch nicht:(
hälfte reicht aus, falls groß und kleinschreibung erlaubt ist macht es davor noch sinn den ersten buchstaben klein zu schreiben
wort = wort.toLowerCase();
int n = wort.length;
for(int i=0; i<n/2; ++i)
if(wort[i] != wort[n-i-1]) return false;
return true;
das erste return statement das ausgeführt wird beendet das programm, wenn false zurückgegeben wird, wird der bereich mit "return true;" nie erreicht
kommt das "return true" dann noch in die for Schleife oder außerhalb bzw. wieso?
Wieso kann man das mit der länge/2 machen?
return true ist außerhalb der for-schleife, für ein palindrom muss man nur gucken ob die zeichen des wortes mit gleicher entfernung zur mitte übereinstimmen
z.b. w = "baac", n=4, w[0] != w[n-1] daher kein palindrom
wenn an einer stelle 2 zeichen nicht übereinstimmen, dann kann es kein palindrom mehr sein, also kann man auch vorzeitig mit der schleife abbrechen
Danke vill noch eine Frage, wenn ich mein return true außerhalb der for Schleife schreibe, wird dann nicht immer return true zurück gegeben?