Kann mir jemand bei dem Java Code helfen?

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.

antwortjabitte  03.12.2020, 11:59

hälfte reicht aus, falls groß und kleinschreibung erlaubt ist macht es davor noch sinn den ersten buchstaben klein zu schreiben

0
Steffi1997563 
Fragesteller
 03.12.2020, 12:03

also ich hab festgestellt dass ich statt "a==i", "(wort.length - a) == i" setzten muss aber irgendwie geht es immer noch nicht:(

0
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;
Steffi1997563 
Fragesteller
 03.12.2020, 12:12

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?

0
antwortjabitte  03.12.2020, 12:22
@Steffi1997563

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

1
Steffi1997563 
Fragesteller
 04.12.2020, 10:39

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?

0
antwortjabitte  04.12.2020, 14:32
@Steffi1997563

das erste return statement das ausgeführt wird beendet das programm, wenn false zurückgegeben wird, wird der bereich mit "return true;" nie erreicht

0