Palindrom

animeLoan

Mitglied
Hallo Kollegen, meine aufgabe ist es ein programm zu schreiben das bestimmt, ob eine einzugebende Zeichenfolge ein
Palindrom ist oder nicht. Große und kleine Buchstaben (A und a) sollen
als unterschiedliche Zeichen behandelt werden.
Mein Anfang sieht so aus:

Java:
import java.util.Scanner;
public class palindrom {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        System.out.println("Bitte eine Zeichenfolge eingeben:");
        String eingabeString = console.nextLine();
        int laengeDerEingabe = eingabeString.length();
        char eingabeZeichen[];
        eingabeZeichen = new char[laengeDerEingabe];
        eingabeZeichen = eingabeString.toCharArray();

    }
    }

komm aber nicht weiter, ich muss auch mit indexen (rechts und links) arbeiten.
 
Zuletzt bearbeitet:
Verwende für das Zeigen von Code bitte die Code-Tags (das </> Symbol im Editor).
Java:
import java.util.Scanner;

public class palindrom {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        System.out.println("Bitte eine Zeichenfolge eingeben:");
        String eingabeString = console.nextLine();
        int laengeDerEingabe = eingabeString.length();
        char eingabeZeichen[];
        eingabeZeichen = new char[laengeDerEingabe]; // Hier erstellst du ein neues leeres char-Array
        eingabeZeichen = eingabeString.toCharArray(); // welches hier sofort wieder überschrieben wird
    }
}

Die Methode toCharArray() erzeugt bereits ein char-Array, so dass die vorherige Initialisierung unnötig ist.
 
Die Aufgabe ist nicht so schwer. Ein Palindrom ergibt von links oder rechts gelesen immer das selbe Wort.
Das kann man ja einfach mal machen:
Java:
        final String palindrom = "RELIEFPFEILER";
        final String mordnilap = new StringBuilder(palindrom).reverse().toString();
        System.out.println(Objects.equals(palindrom, mordnilap));
Aber offensichtlich geht es hier um eine Übung mit dem Index und der Länge eines Strings.
Dabei ist links einfach 0 und rechts die Länge des Palindroms - 1, da der erste Index 0 ist. Prüfen muss man nur bis zur Hälfte des Palindroms:
Der linke Buchstabe (links) am Index 0, 1, 2, 3 ... muss einfach mit dem jeweiligen rechten Buchstaben verglichen werden, also rechts - links. Bei ungerader Buchstabenanzahl muss man den mittleren Buchstaben nicht vergleichen. Buchstaben eines String sind char und die vergleicht man mit ==.
Also wird das eine simple Schleife:
Java:
    public static void main(final String[] args) throws Exception {
        System.out.println(isPalindrome("RELIEFPFEILER"));
    }

    private static boolean isPalindrome(final String palindrome) {
        final int half = Math.floorDiv(palindrome.length(), 2);
        final int right = palindrome.length() - 1;
        for (int left = 0; left < half; left++) {
            if (palindrome.charAt(left) != palindrome.charAt(right - left)) {
                return false;
            }
        }
        return true;
    }
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben