Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Schreibe eine weitere Methode boolean istPalindrom(String text), die nur für Palindrome wie anna, otto, regallager oder axa true liefert. Vergleiche dazu die passenden Zeichen innerhalb des Strings. Verwende die Methode toLowerCase() aus der Klasse String, um den Unterschied zwischen Groß- und Kleinschreibung zu ignorieren, damit auch Anna, Otto und Regallager als Palindrome erkannt werden.
Ja. Du brauchst eine Schleife in der du den ersten und den letzten Buchstaben des Wortes vergleichst, dann den zweiten und den vorletzten, usw. Wenn sie nicht übereinstimmen ist es kein Palindrom. Die Schleife muss nur bis zur Mitte des Wortes lauf
Du hast zwei Strings ersteHaelfte / zweiteHaelfte. Diese sind natürlich kürzer wie der String in neuerText.
Nun gehst Du aber mit i durch alle Stellen von neuerText. Das wird dann natürlich zu Problemen führen, sobald Du zu einer Stelle kommst, die es nicht mehr gibt, denn die Dokumentation von charAt gibt an:
IndexOutOfBoundsException - if the index argument is negative or not less than the length of this string.
Und noch einmal der wichtige Hinweis zum if Befehl:
Java:
if (a) {
// Hier ist a == true!
} else {
// hier ist a == false!
}
Wenn Du also a abgeprüft hast, dann musst Du im else nicht mehr !a prüfen. Wenn die Zeichen gleich sind, dann geht er in das if und ansonsten geht er in das else. Eine Prüfung, ob die Zeichen ungleich sind, ist also schlicht nicht notwendig!
Einen else-Zweig brauchst du gar nicht.
Prüfe einfach ob die beiden Buchstaben nicht übereinstimmen, dann ist es kein Palindrom. In dieser Art:
Java:
boolean istPalindrom = true;
for (...) {
wenn Buchstaben nicht übereinstimmen, dann istPalindrom = false;
}
return istPalindrom; // wenn es in der Schleife nicht false gesetzt wurde, dann ist es ein Palindrom
oder mit frühzeitigem Abbruch:
Java:
for (...) {
wenn Buchstaben nicht übereinstimmen, dann return false;
}
return true;
Hast Du die OutOfCoffeeException nicht gesehen? Also ich habe die hier ganz deutlich wahrnehmen können.
Da war ein Stracktrace mit org.javaforum.mihe7.ArticleWriter.writeResponse - die Zeilennummer habe ich mir aber nicht gemerkt .... schau mal in die Logs hier vom Thread - da findest Du die.
Aber schau dir die Schleife einmal an - in der Schleife ohne Bedingung ein return sieht immer schlecht aus:
- Entweder Du brauchst eine Schleife - dann willst Du nicht sofort rausspringen.
- Oder du brauchst keine Schleife.
Ja, dann schau Dir die Syntaxfehler an und behebe diese. Wenn Du damit Probleme hast, dann gib uns den genauen Code zusammen mit der genauen Fehlermeldung.
Aber das ist alles immer noch sehr dubios: text.charAt(text.length()) Das wirst Du nicht einmal gestartet haben ...
Wichtig ist, dass Du versuchst, Probleme zu verstehen. Ich habe das Gefühl, dass du wild ausprobierst und Dir im Augenblick der Überblick fehlt. Das ist sehr schade, denn dadurch fehlt uns jeder Ansatz, die zu helfen. Und dann kommen teilweise Aussagen, die Dich evtl. noch eher weiter demotivieren und Dir nicht helfen.
Das ist schade - zumal Du ja schon Code-Teile hattest, die deutlich besser waren, z.B. das: if(neuerText.charAt(i) != neuerText.charAt(neuerText.length()-i-1))
String word = "Hannah";
char ersterBuchstabe = word.charAt(0); // Zählung beginnt bei 0
char letzterBuchstabe = word.charAt(word.length() - 1); // weil die Zählung bei 0 beginnt muss 1 abgezogen werden
char nächsterBuchstabe = word.charAt(1);
char vorherigerBuchstabe = word.charAt(word.length() - 2);
Du willst aber nicht immer nur den ersten und den letzten Buchstaben vergleichen, sondern immer den nächsten, bzw. vorherigen Buchstaben. Dazu hast du die Schleife mit der Indexvariablen i, die mit 0 beginnt.
Also schreiben wir das mal abhängig von i:
Java:
int i = 0;
char ersterBuchstabe = word.charAt(i); // Index 0 => 'H'
char letzterBuchstabe = word.charAt(word.length() - 1 - i); // Index 6 - 1 - 0 = 5 => 'h'
i = 1;
char nächsterBuchstabe = word.charAt(i); // Index 1 => 'a'
char vorherigerBuchstabe = word.charAt(word.length() - 1 - i); // Index 6 - 1 - 1 = 4 => 'a'
// usw.
Du musst also den Buchstaben charAt(i) mit dem Buchstaben charAt(length() - 1 - i) vergleichen.
Das kombinierst du jetzt mit diesem:
Java:
boolean istPalindrom = true;
for (...) {
wenn Buchstaben nicht übereinstimmen, dann istPalindrom = false;
}
return istPalindrom; // wenn es in der Schleife nicht false gesetzt wurde, dann ist es ein Palindrom
Verzichte dabei erst mal auf die Kontrolle auf null oder leerem String. Das kannst du danach noch einfügen.
Ich hoffe das hilft, ansonsten sag uns bitte, wo du Verständnisprobleme hast. Dann können wir darauf konkret eingehen.
Jetzt mal ernsthaft: mit der Einstellung kommst Du nicht weiter. Die Aufgabe ist was zum Warmwerden mit der Sprache, von der Schwierigkeit her in etwa das "Hello World" der Schleifen. Wenn Du da schon die Flinte ins Korn wirfst, kannst Du Dich auch gleich abmelden (EDIT: vom Studium, natürlich).
Das Einzige, was evtl. etwas ungewohnt ist, ist der Umgang mit Indizes, die bei 0 beginnen - wobei das eigentlich nichts Ungewöhnliches ist: wir haben 10 Ziffern, die von 0 bis 9 gehen. So ist es hier halt auch: bei einem Text der Länge n gehen die Indizes der Zeichen eben von 0 bis n-1.
Der Rest ist doch einfach nur der Vegleich, ob das Zeichen an Position i mit dem Zeichen an Position n-1-i (n-1, weil Indizes...) übereinstimmt. Ist ein Zeichen dabei, wo das nicht der Fall ist -> kein Palindrom, sonst Palindrom. Überlegen kann man sich noch, wie weit das i maximal gehen muss.
Jetzt den Spaß noch etwas präziser als Algorithmus formulieren und in Java kodieren. Fertig.
So sehr ich das auch verstehen kann - Zum Studium gehört es nun einmal auch, sowas zu lernen. Und im Rahmen Deines Studiums der Wirtschaftsinformatik wirst Du bestimmt noch deutlich mehr machen, auf das Du evtl. kein Bock hast und - noch wichtiger - das auf dem hier aufbaut. Das sind keine Dinge, die Du später nie mehr brauchst. Hier geht es um absolute Grundlagen.
Und ich bin kein Studienberater, aber wenn Du auf Informatik (Oder einen der Kernbereiche der Informatik) kein Bock hast, dann solltest Du evtl. ein Studienfach wählen, das eben kein "Informatik" im Namen hat.
Also nur noch einmal: Hier geht es um absolute Basics. Eine einfache Schleife die Zeichen an bestimmten Positionen eines Strings vergleicht. Später werden noch ganz andere Dinge kommen. Du wirst bestimmt auch mit sowas wie Graphen konfrontiert. Und selbst bei Themen, in denen es nicht in erster Linie um Entwicklung geht, muss man verstehen, wie etwas abläuft. Datenbanken, Betriebssysteme, Rechnernetze, .... Da hilft es, ein Verständnis zu haben, wie ein Rechner intern tickt und wie es da abläuft. Und bei der Entwicklung hast Du (auf einem hohen Niveau) da einen guten Einblick.
Zusätzlich könnten Fragen zum Thema Datenstrukturen und deren geeigneter Bearbeitung oder Manipulation z.B. später in Bewerbungsgesprächen auftauchen (Eigenrecherche: java interview questions data structures). Dagegen ist das Thema "Palindrom" eher banal...