public class Palindrom extends MiniJava { /** * Wandelt einen als Parameter übergebenen String in einen kleingeschriebenen * String um. Entsprechend werden nur die Zeichen A-Z zu a-z. */ public static String toLowerCase(String input) { String output = ""; // an diesen String reihen wir Zeichen für Zeichen an for (int i = 0; i < input.length(); i++) { // -> wir gehen durch den String char currentChar = input.charAt(i); // wir holen uns das i-te Zeichen if (currentChar >= 'A' && currentChar <= 'Z') // -> Großbuchstabe currentChar += ('a'-'A'); // zu Kleinbuchstaben machen output += currentChar; // (evtl. verändertes) Zeichen hinten anfügen } return output; // kleingeschriebenen String zurückgeben } /** * Gibt den als Parameter übergebenen String als ein Array von einzelnen * Zeichen (chars) zurück. Beispiel: "Hallo" -> {'H', 'a', 'l', 'l', 'o'} */ public static char[] toCharArray(String input) { char[] output = new char[input.length()]; // lege Array von gleicher Größe an for (int i = 0; i < output.length; i++) { // gehe Zeichen für Zeichen durch den String output[i] = input.charAt(i); // füge das i-te Zeichen des Strings an die i-te Position im Array } return output; // Array zurückgeben } /** * Gibt true zurück, falls es sich bei der Zeichenkette, die als ein Array von * einzelnen Zeichen (chars) übergeben wird, um ein Palindrom handelt. * Anderenfalls wird false zurückgegeben. * Bei dieser Funktion spielt die Groß- und Kleinschreibung eine Rolle! * Es wird nur eine Schleife verwendet. */ public static boolean isPalindrome(char[] input) { // Wir müssen nur über die Hälfte gehen, da wir pro Durchlauf ja genau // zwei Zeichen (i-tes von vorne und i-tes von hinten) miteinander // vergleichen. Bei ungerader Länge spielt das mittlere keine Rolle. for (int i = 0; i < input.length/2; i++) { if (input[i] != input[input.length-1-i]) // -> kann kein Palindrom sein return false; } return true; // nie false geliefert, also muss true gelten } public static void main(String[] args) { // https://de.wikipedia.org/wiki/Liste_deutscher_Palindrome String str = readString("Gib ein Wort ein und ich sage dir, ob es sich" + "um ein Palindrom handelt: "); int upperLower = readInt("Soll die Groß- und Kleinschreibung beachtet" + "werden? (1=Ja, sonst Nein)"); if (upperLower != 1) str = toLowerCase(str); // entspricht der Bib.funktion s.toLowerCase() char[] strAsCharArray = toCharArray(str); if (isPalindrome(strAsCharArray)) write(str + " ist ein Palindrom."); else write(str + " ist kein Palindrom."); } }