Palindrom

leany

Mitglied
Hallo zusammen

Ich habe folgendes Script:

Java:
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
 
S

SlaterB

Gast
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
Java:
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
Java:
   if (text[posAuf] == ' ') posAuf++; //Leerzeichen überlesen 
   if (text[posAb] == ' ') posAb--; //Leerzeichen überlesen
in while-Schleifen umzuändern,
Vorsicht mit Leerzeichen am Ende/ Anfang
 

Loep

Aktives Mitglied
Alternativ kannst du auch einen Umweg über nen String-Object machen und dort alle Leerzeichen (oder gleich alle Whitespaces: Tab usw.) entfernen lassen:
Java:
...
text = Console.readCharArray();
text = new String(text).replaceAll("\\s+", "").toCharArray();
...
Die beiden Zeilen kannst du dann entfernen:
Java:
if (text[posAuf] == ' ') posAuf++; //Leerzeichen überlesen 
if (text[posAb] == ' ') posAb--; //Leerzeichen überlesen
 

leany

Mitglied
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
Java:
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
Java:
   if (text[posAuf] == ' ') posAuf++; //Leerzeichen überlesen 
   if (text[posAb] == ' ') posAb--; //Leerzeichen überlesen
in while-Schleifen umzuändern,
Vorsicht mit Leerzeichen am Ende/ Anfang

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:
 

Neue Themen


Oben