PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Palindrom



SuicideSamurai
16.12.2008, 21:42
Hi. Wäre cool wenn sich jemand etwas Zeit nimmt und mir weiterhilft. Ich bekomme das nicht auf die Reihe. Die Aufgabe ist: Es soll eine Zeichenkette(max. 70 Zeichen) eingelesen
werden. Und das "Programm" soll mir sagen ob es ein Palindrom ist oder nicht. (Ein Palindrom ist eine Zeichenkette die rückwärts gelesen das gleiche ergibt wie vorwärts gelesen.)
Hier mein Lösungsversuch.

class PalindromTest
{
public static void main(String [] args)
{
int i;
int n;
String zeichenKette_ref;
char[] zeichenFeld_ref;
StdEingabe instream_ref;

instream_ref = new StdEingabe();
//Also ich sag mal was ich hier machen will.
zeichenKette_ref = instream_ref.liesStringMaxN (70, "Zeichenkette eingeben:"); //Zeichenkette einlesen.
zeichenFeld_ref = zeichenKette_ref.toCharArray(); //toCharArray() soll jetzt ein Array erzeugen und die eingegebenen Zeichen in den Feldern ablegen.
zeichenFeld_ref= new char[zeichenKette_ref.length]; //zeichenKette_ref.length ist doch praktisch die Anzahl der eingegebenen Zeichen
i=zeichenKette_ref.length-1; //also erzeuge ich ein Array das genau so lang ist wie das Array von toCharArray(). i ist der Index für das letzte Feld

for(n=0;n<zeichenKette_ref.length;n++)
{
if(zeichenFeld_ref[n]!=zeichenFeld_ref[i]) //vergleicht das 1.Feld mit dem letzten Feld im zweiten Durchlauf das 2.Feld mit dem vorletzten Feld usw. ...
{
System.out.print ("Kein Palindrom.");
n=zeichenKette_ref.length; //damit die Schleife nicht mehr betreten wird
}
i--;
}

if(n<zeichenKette_ref.length)
System.out.print ("Palindrom");

}//endmethod main
}//endclass PalindromTest

Das funktioniert aber irgendwie net. Hat jemand einen Tip für mich?

blackberry
17.12.2008, 13:09
Weil ich deine Klasse "StdEingabe" nicht besitze fiel es mir schwer an deinem Beispiel anzuknüpfen, also habe ich einfach eine String-Instanz mit einem Beispielwert befüllt.
Du kannst dir die Klasse ja dann soweit anpassen ^^


class Palindrome
{
public static void main(String [] args)
{
String word = new String();

// TODO: den String "word" von der Tastatur einlesen
word = "otto";

if (check(word))
{
System.out.println("Das Wort \"" + word + "\" ist ein Palindrom!");
}
else
{
System.out.println("Das Wort \"" + word + "\" ist kein Palindrom!");
}
}

public static boolean check(String str)
{
int len = str.length() - 1;

for(int i = 0; i <= len; i++)
{
if (str.toLowerCase().charAt(i) != str.toLowerCase().charAt(len - i))
{
return false;
}
}
return true;
}
}

Getestet habe ich das ganze mit folgenden Palindromen:

Hannah
Lagerregal
Otto
Reittier
Reliefpfeiler
Rentner
Rotor
(Qulle: Wikipedia (http://de.wikipedia.org/wiki/Palindrom), 17.12.2008)

und noch mit ein paar nicht-Palindromen ;)

PS: da sich unsere beiden Ansätze nur in deiner Umwandlung von String zu char-Array unterscheiten würde ich sagen, dass der Fehler dort zu finden ist.


mfG. BlackBerry

LudenJupp
17.12.2008, 13:19
Du solltest vorher noch alle Leer- und Satzzeichen entfernen, damit auch Sätze erkannt werden. ;-)
Somit funkionierten auch:
"Ein Neger mit Gazelle zagt im Regen nie."
"Eine Horde bedrohe nie!"