# Palindrom



## leany (1. Dez 2011)

Hallo zusammen 

Ich habe folgendes Script:


```
import inout.Console;
 
class Palindrom 
{ 
 public static void main (String args[]) 
 { 
  char[] text; //Deklaration eines Feldes
  System.out.println
   ("Bitte Text eingeben (in Kleinbuchstaben):");
  
  text = Console.readCharArray();
  int laenge = text.length;
  int posAuf = 0, posAb = laenge-1;
  String merke = "ein Palindrom!";
  //Vergleich von Zeichen auf entgegengesetzten Positionen
  while (posAuf < posAb)
  {
   if (text[posAuf] == ' ') posAuf++; //Leerzeichen überlesen 
   if (text[posAb] == ' ') posAb--; //Leerzeichen überlesen
   if (text[posAuf] != text[posAb])
    {
        merke = "kein Palindrom";
        break;
    }
    posAuf++;
    posAb--;
  }
  System.out.println("Der eingelesene Text: "); 
  for (int i=0; i <= text.length-1; i++)    
    System.out.print(text[i]);
  System.out.println("\nist " + merke);
 } 
}
```

Ich soll nun das Script so umschreiben, dass auch mehrere Leerzeichen überlesen werden und z.B. der Satz: "ein neger mit gazelle zagt im regen nie" trotzdem als Palindrom erkannt wird. Ich finds nicht raus?!? 
Gruss
Leany


----------



## SlaterB (1. Dez 2011)

was genau ist denn dein Problem?
jedes Programm mit Eingabe ist für den Rest der Welt erstmal unverständlich, niemand kann nachprüfen was du bei dir eintippst, wie das Programm dann fehlerhaft reagiert oder nicht oder was auch immer,

schreibe ich dein rassistisches Beispiel

```
text = "ein neger mit gazelle zagt im regen nie".toCharArray();
```
in den Quellcode, dann wird erfolgreich durchlaufen, fertig?
falls es dir tatsächlich um mehrere Leerzeichen hintereinander geht, was du nicht durch entsprechende Beispiele genau verdeutlicht hast,
dann empfiehlt sich, die ifs 

```
if (text[posAuf] == ' ') posAuf++; //Leerzeichen überlesen 
   if (text[posAb] == ' ') posAb--; //Leerzeichen überlesen
```
in while-Schleifen umzuändern,
Vorsicht mit Leerzeichen am Ende/ Anfang


----------



## Loep (1. Dez 2011)

Alternativ kannst du auch einen Umweg über nen String-Object machen und dort alle Leerzeichen (oder gleich alle Whitespaces: Tab usw.) entfernen lassen:

```
...
text = Console.readCharArray();
text = new String(text).replaceAll("\\s+", "").toCharArray();
...
```
Die beiden Zeilen kannst du dann entfernen:

```
if (text[posAuf] == ' ') posAuf++; //Leerzeichen überlesen 
if (text[posAb] == ' ') posAb--; //Leerzeichen überlesen
```


----------



## leany (3. Dez 2011)

SlaterB hat gesagt.:


> was genau ist denn dein Problem?
> jedes Programm mit Eingabe ist für den Rest der Welt erstmal unverständlich, niemand kann nachprüfen was du bei dir eintippst, wie das Programm dann fehlerhaft reagiert oder nicht oder was auch immer,
> 
> schreibe ich dein rassistisches Beispiel
> ...



sorry für das rassistische Beispiel, ist aber so ziemlich das einzige Mehrwort-Palindrom das ich kenne :rtfm:und danke für Deine Hilfe, werd' die While-Schleife testen und auch die Sache mit dem replaceAll von Loep. Ist mir im übrigen auch klar, dass mein Programm für den Rest der Welt unverständlich ist, wenn aber bei der Eingabe einer ein Palindrom aus mehrerern Wörtern eingibt und irgendwo zwei Leerschläge tippt erkennt mein Programm das Ding nicht mehr als Palindrom -  mein Programm ist nämlich  faktisch nocht dümmer als ich:toll:


----------



## tfa (3. Dez 2011)

leany hat gesagt.:


> das einzige Mehrwort-Palindrom das ich kenne


Hier hast du noch eins:



> Geist ziert Leben, Mut hegt Siege, Beileid trägt belegbare Reue,
> Neid dient nie, nun eint Neid die Neuerer, abgelebt gärt die Liebe,
> Geist geht, umnebelt reizt Sieg.


Hier musst du allerdings auch noch die Satzzeichen berücksichtigen.


----------



## leany (8. Dez 2011)

tfa hat gesagt.:


> Hier hast du noch eins:
> 
> 
> Hier musst du allerdings auch noch die Satzzeichen berücksichtigen.



Top!!! Damit schlage ich mich dann in einem Jahr herum - falls mich der Mut zum Programmieren bis dahin nicht verlassen hat!


----------

