Palindrom mit Groß & kleinbuchstaben

Status
Nicht offen für weitere Antworten.

Moppel

Mitglied
hi mein Programm soll auf Palindrome testen was es jedoch nur bei Wörtern macht die komplett aus kleinen oder komplett aus großen Buchstaben bestehen. Wie bekomm ich es hin das es auch für Wörter mit Groß-& Kleinbuchstaben funktioniert???

THX




Code:
public class palindrom {
  public static void main (String args[] ) {
    for(int i=0; i<args.length; i=i+1) {
      boolean b;
        b = new palindrom().istPalindrom(args[i]);
      System.out.println(args[i]+" ist "+(b ? "" : "kein ")+"Palindrom");
    }
  }

  public boolean istPalindrom(String s) {
    int laenge = s.length();
    if(laenge==0) return true;

    for(int i=0; i<laenge/2; i=i+1)
      if(s.charAt(i) != s.charAt(laenge-i-1))
        return false;
    return true;
  }
}
 

ARadauer

Top Contributor
ich würd da nicht lange umscheißen: ( :bloed: für die ausdrucksweise)
b = new palindrom().istPalindrom(args.toUpperCase());

alles groß und aus :cool:
 
S

SlaterB

Gast
s = s.toLowerCase();

oder bei den Buchstaben einen Unterschied von x erlauben
(schaue dir die Abstände der chars an)
 

Cobrus

Mitglied
Hallo,

welche Änderung müsste ich bei obigem Code vornehmen, damit ich nicht für jeden Schleifendurchlauf eine Ausgabe bekomme? Ich habe es mit System.out.println am Ende des Programmes versucht, erhalte aber jedesmal die Nachricht, das b noch nicht initialisiert ist.

Hat auch jemand ein Idee, wie ich es angehe, dass mir jedes Palindrom aus einem Satz/Text beliebiger Länge herausgesucht wird?


Gruß,
Cobrus
 

Prusik

Aktives Mitglied
du musst
Code:
boolean b;

vor der Schleife deklarieren (vor die Schleife kopieren)
und danach die Ausgabe aus der Schleife... die Variablen gelten jeweils nur im Block (zwischen {}) in dem sie deklariert wurden...
 

Cobrus

Mitglied
Die Initialisierung von b vor der Schleife ist schon klar. Es funktioniert trotzdem nicht, wie gewünscht. Der System.out.print läuft für jedes Zeichen durch, was bei Texten irgendwann unübersichtlich wird und die Dialogbox mecker, dass b nicht initialisiert ist.

Mein Code ist folgender:

Code:
public static void main(String[] args) {
    
  public static boolean Palindrom (String text) {
    
    text = text.toLowerCase().replaceAll(" ","").replaceAll(".","");
    
    if (text.contains("?")==true)
      text = text.replaceAll("?","");
    
    int länge = text.length();
    if(länge == 1)
      return true;
     
    for(int i = 0; i < länge/2; i++)
      if(text.charAt(i) != text.charAt(länge-i-1))
        return false;
    return true;    


  public static void main(String[] args) {

    String text = "Ein Esel lese nie.";
    boolean b; 
    
    for(int i=0; i<text.length(); i++) {
      b = class.Palindrom(text);
      System.out.println("Ihre Eingabe '" + text + "' ist " + (b ? "" : "k")+ "ein Palindrom");
    }
    
    JOptionPane.showMessageDialog(null,
      "Ihre Eingabe '" + text + "' ist " + (b ? "" : "k")+ "ein Palindrom",
      "Box 2", JOptionPane.INFORMATION_MESSAGE);
  }
  
}


Gruß
Cobrus
 
M

maki

Gast
Code:
    for(int i=0; i<text.length(); i++) {
      b = class.Palindrom(text);
      System.out.println("Ihre Eingabe '" + text + "' ist " + (b ? "" : "k")+ "ein Palindrom");
    }
Das ist ja mal 'ne seltsame Schleife.

Brauchst du die wirklich? Las sie doch mal weg ;)

Code:
      b = Palindrom(text);
      System.out.println("Ihre Eingabe '" + text + "' ist " + (b ? "" : "k")+ "ein Palindrom");

Nachtrag: Solltest dich besser an die java Codeconventions halten.

Die Methode Palindrom sollte isPalindrom heissen.
 

Cobrus

Mitglied
Das ist ja mal 'ne seltsame Schleife

Ehrlich gesagt, war die nur da drin, weil sie in Moppels code enthalten war. Das Prinzip des Programmes habe ich noch nicht vollständig für mich erschließen können.

So wie es jetzt da steht funktioniert es auch noch nicht richtig. :roll: Die Ergänzung, dass es Sonderzeichen entfernen soll, stört in der momentanen Ausführung:

Code:
public static boolean Palindrom (String text) {
   
    text = text.toLowerCase().replaceAll(" ","").replaceAll(".","");
   
    if (text.contains(",")==true)
      text = text.replaceAll(",","");
    if (text.contains("?")==true)
      text = text.replaceAll("?","");
    if (text.contains("!")==true)
      text = text.replaceAll("!","");
    if (text.contains(";")==true)
      text = text.replaceAll(";","");
    if (text.contains(":")==true)
      text = text.replaceAll(":","");
    if (text.contains("'")==true)
      text = text.replaceAll("?"'"");

Wenn ich die Sonderzeichen nicht berücksichtige, wird ein Satz wie "O Genie, der Herr ehre dein Ego!" nicht als Palindrom anerkannt werden. Im derzeitigen Zustand sieht das Programm aber auch in Worten wie Hund und Auto ein Palindrom. Kann mir da jemand einen Ansatz geben, wie ich das am besten vermeide?

Hat auch jemand ein Idee, wie ich es angehe, dass mir jedes Palindrom aus einem Satz/Text beliebiger Länge herausgesucht wird?

Was hat es mit dieser Konvention auf sich? Warum muss ich den Namen meiner Variable länger machen als unbedingt nötig? ???:L
 
M

maki

Gast
Warum prüfst du erst bevor du die Satz- und Sonderzeichen entfernst? Performance???
Lass die Prüfung ;)

Was hat es mit dieser Konvention auf sich?
Es gibt einen quasi Standard, die Java Code conventions.
Wenn man sich daran hält, ist es auch für andere leihter deinen Code zu lesen und die Namen sind dadurch aussagekräftiger.

Warum muss ich den Namen meiner Variable länger machen als unbedingt nötig? icon_scratch.gif
Länger als unbedingt nötig? Wolltest du 2 Chars sparen? :D

Mit einer richtigen IDE tippst du den namen nur ein einziges mal komplett, da ist es wirklich egal ob Variablennamen länger sind als 10 Buchstaben, die Zeiten als man kurze Namen bevorzugt hat und Speicherplatz teuer war (70'er Jahre) sind vorbei!

Heute kommt es auf die Aussagekraft des Codes an sich an, Kommentare sind verpönt.

zB sSollten Methoden welche einen boolean zurückliefern, mit "is.." anfangen, Klassennamen immer Groß anfangen, Methoden und packages immer klein etc.
 

Cobrus

Mitglied
Warum prüfst du erst bevor du die Satz- und Sonderzeichen entfernst? Performance???
Lass die Prüfung

Das war auch mein anfängliches Vorhaben, aber bei mehr als " " und "." in einer Reihe kriege ich nach dem Compilieren und der Texteingabe folgende Fehlermeldung: Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near Index 0.
Die erste Idee sah so aus:

Code:
text = text.toLowerCase().replaceAll(" ","").replaceAll(".","").replaceAll(",","").replaceAll("!","").replaceAll("?","")
.replaceAll("'","").replaceAll(";","").replaceAll(":","");

Wenn man sich daran hält, ist es auch für andere leihter deinen Code zu lesen und die Namen sind dadurch aussagekräftiger.
zB Sollten Methoden welche einen boolean zurückliefern, mit "is.." anfangen, Klassennamen immer Groß anfangen, Methoden und packages immer klein etc.

Okay, werde schauen, dass ich mich in Zukunft daran halte.
 
M

maki

Gast
Das war auch mein anfängliches Vorhaben, aber bei mehr als " " und "." in einer Reihe kriege ich nach dem Compilieren und der Texteingabe folgende Fehlermeldung: Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near Index 0.
Bestimmte Zeichen sind Sonderzeichen für die RegEx.

Da du sowieso nur character ersetzt und nicht ganze String/RegEx, kannst du auch die Methode replace(..) verwenden, ersetzt halt die Zeichen mit nem Leerzeichen.

Oder du bleibst bei den RegEx, aber dann musst du die Sonderzeichen (?, etc) maskieren.
 

Cobrus

Mitglied
Hmm, mit replace funktioniert es. Keine Probleme mehr oder zumindest finde ich sie gerade nicht. :)
Du weißt nicht zufällig auch, wie ich es angehe, um mir jedes Palindrom aus einem Satz/Text beliebiger Länge anzeigen zu lassen, oder?

Mal eine Verständnisfrage: replace bedeutet doch, dass immer nur das erste gefundene Zeichen ersetzt wird, während replaceAll alle Zeichen umsetzt?
 
M

maki

Gast
Du weißt nicht zufällig auch, wie ich es angehe, um mir jedes Palindrom aus einem Satz/Text beliebiger Länge anzeigen zu lassen, oder?
Auf Anhieb nicht, das hört sich nach einem Algo an der ganze Texte durchsucht ;)

Mal eine Verständnisfrage: replace bedeutet doch, dass immer nur das erste gefundene Zeichen ersetzt wird, während replaceAll alle Zeichen umsetzt?
Nach oben
Doku lesen hilft ;)
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#replace(char,%20char)
 

Cobrus

Mitglied
Hab auf Basis von Moppls Code mal einen Algorithmus gebastelt, der einen längeren Text auf Palindrome untersucht.

Wer Lust und Laune hat schaue doch bitte mal drüber. Tät mich interessieren, ob es irgendwelche Probleme damit gibt oder was man evtl. kürzer machen könnte.

Code:
public static void main (String [] args) {
    
  String text = "Hier Text eingeben.";
    
  text = text.toLowerCase().replace(".","").replace(",","").replace("?","").replace("!","").
       replace(";","").replace(":","").replace("'","").concat(" ");

  int durchlauf = 0;
      //Diese Variable läuft den Text durch.
  int wortAnfang = 0;
      /*Diese Variable springt in Abhängigheit von durchlauf durch den Text und
        stellt die Indizes für die einzelnen Wortanfänge dar.*/

  while (durchlauf < text.length()) {
      //while-Schleife, da die Länge der Worte unbekannt ist
        
    if (text.charAt(durchlauf) == ' ') {
      //Wird ein Leerzeichen getroffen, wird der bisherige Textteil als eigenständiger String untersucht. 
      String teil = text.substring(wortAnfang, durchlauf);
            
      int länge = teil.length();
      if(länge == 1)
        System.out.println("Das Zeichen '" + teil + "' ist ein Palindrom.");
           
        boolean b = true;
            
        for(int i = 0; i < länge/2; i++) {
          if(teil.charAt(i) != teil.charAt(länge-i-1)) 
            b = false;
          
        System.out.println("Das Wort '" + teil + "' ist " + (b ? "" : "k") + "ein Palindrom.");
        }
          
      wortAnfang = durchlauf + 1;
      /*Erst wenn ein Leerezeichen erreicht wurde, wird die Variable geändert und als Anfang
        des nächsten substrings definiert*/
          
    }
        
    durchlauf++;
      //Normales Weiterzählen der Variable.
  }
 
}
 
G

Guest

Gast
Cobrus hat gesagt.:
Hat auch jemand ein Idee, wie ich es angehe, dass mir jedes Palindrom aus einem Satz/Text beliebiger Länge herausgesucht wird?
1. Großbuchstaben in Kleinbuchstaben umwandeln
2. Alle Zeichen, die kein Kleinbuchstabe sind, entfernen
3. neuen, gespiegelten String erzeugen
4. schauen, ob Original und Spiegelung gleich sind

Code:
public class Palindrom
{
	public static void main(String args[])
	{
		for (String arg: args)
		{
			System.out.println(arg + " ist "
					+ (istPalindrom(arg) ? "" : "k") + "ein Palindrom");
		}
	}

	public static boolean istPalindrom(String s)
	{
		String t = s.toLowerCase().replaceAll("[^a-z]", "");
		return t.equals(new StringBuilder(t).reverse().toString());
	}
}

Beispielaufruf:


java Palindrom Test Otto "O Genie, der Herr ehre dein Ego!"

Test ist kein Palindrom
Otto ist ein Palindrom
O Genie, der Herr ehre dein Ego! ist ein Palindrom


Fred
 

Cobrus

Mitglied
1. Großbuchstaben in Kleinbuchstaben umwandeln
Richtig, habe ich vergessen mit anzugeben. Ohne klappts natürlich nicht.

2. Alle Zeichen, die kein Kleinbuchstabe sind, entfernen
Jupp, ist drin.

3. neuen, gespiegelten String erzeugen
4. schauen, ob Original und Spiegelung gleich sind
Das ist eine interessante Methode. Werde ich im Hinterkopf behalten.

Kannst Du mir evtl. die Bedingung der for-Schleife etwas näher erläutern? Das verstehe ich nicht so ganz.


Gruß,
Cobrus
 
G

Guest

Gast
die bedingung der for-schleife?
Code:
for (String arg: args)
      {
         System.out.println(arg + " ist "
               + (istPalindrom(arg) ? "" : "k") + "ein Palindrom");
      }

du hast als input ja nen string-array (args[]). und für jedes element darin wird die schleife ausgeführt. in der schleife wird das element dann als String arg angesprochen.
 
G

Guest

Gast
Cobrus hat gesagt.:
Kannst Du mir evtl. die Bedingung der for-Schleife etwas näher erläutern? Das verstehe ich nicht so ganz.
Das ist die sog. "erweiterte for-Schleife", eingeführt mit Java 5. Folgender Code
Code:
for (type element : collection) statement
iteriert einfach über alle Elemente einer Sammlung, die Du dann in der Anweisung jeweils mit dem vergebenen Namen ("element") ansprechen kannst.


Fred
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Größtes Palindrom Produkt aus zwei dreistelligen Zahlen Java Basics - Anfänger-Themen 60
A Palindrom Java Basics - Anfänger-Themen 3
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
H Palindrom ermitteln Java Basics - Anfänger-Themen 21
N palindrom erkennen Java Basics - Anfänger-Themen 3
H Harshad-Zahl (Nivenzahl) und Palindrom überprüfen Java Basics - Anfänger-Themen 2
L Palindrom in zweidimensionalem Array Java Basics - Anfänger-Themen 16
B Palindrom Test mit Junit Java Basics - Anfänger-Themen 23
T Auf Palindrom überprüfen Java Basics - Anfänger-Themen 10
R Best Practice Palindrom in einem Text finden Java Basics - Anfänger-Themen 18
L In Javakara Palindrom erkennen. Java Basics - Anfänger-Themen 9
P Programm Hilfe Palindrom Java Basics - Anfänger-Themen 6
C Bei der LinkedList auf Palindrom überprüfen Java Basics - Anfänger-Themen 4
Y Rekursiv Palindrom herausfinden Java Basics - Anfänger-Themen 5
C Palindrom im array Java Basics - Anfänger-Themen 5
R Palindrom eines int-Arrays berechnen Java Basics - Anfänger-Themen 14
D Palindrom Java Basics - Anfänger-Themen 15
H Palindrom Programm Java Basics - Anfänger-Themen 8
K Palindrom Test Java Basics - Anfänger-Themen 9
C Überprüfen auf Palindrom Java Basics - Anfänger-Themen 12
P Palindrom Java Basics - Anfänger-Themen 10
R In einem Palindrom 2 Buchstaben vergleichen Java Basics - Anfänger-Themen 16
H Palindrom Java Basics - Anfänger-Themen 7
NoXiD Auf Palindrom Prüfen Java Basics - Anfänger-Themen 9
M Palindrom Test mit Char-arrays! Java Basics - Anfänger-Themen 3
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
S Chars vergleichen ohne Betrachtung der Groß und Kleinschreibung Java Basics - Anfänger-Themen 7
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
N Groß- und Kleinschreibung bei Java: void Methode Java Basics - Anfänger-Themen 1
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
N Eingabe erkennen, ob groß oder kleingeschrieben worden ist Java Basics - Anfänger-Themen 22
B Regex ignorieren von Groß - Kleinschreibung Java Basics - Anfänger-Themen 1
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
B String: Groß- und Kleinschreibung ignorieren bei Contains? Java Basics - Anfänger-Themen 2
S Groß- und Kleinbuchstaben gleich behandeln Java Basics - Anfänger-Themen 3
MR._FIRE_Flower String Anfangsbuchstabe Groß Java Basics - Anfänger-Themen 23
K Sortierung eines int-Arrays von groß nach klein Java Basics - Anfänger-Themen 3
Bregedur String beim nächstem groß geschriebenen Buchstaben trennen Java Basics - Anfänger-Themen 1
D Groß/KleinBuchstaben zählen Java Basics - Anfänger-Themen 21
W Erste Schritte Erster Buchstabe groß bzw. klein???? Java Basics - Anfänger-Themen 2
S Groß bzw. Klein Buchstaben umwandeln (gemischt) Java Basics - Anfänger-Themen 1
M FileWriter Neue Datei wenn aktuelle "zu groß" Java Basics - Anfänger-Themen 3
S Fenster ist zu groß Java Basics - Anfänger-Themen 8
H Objekt zu groß zum Senden? Java Basics - Anfänger-Themen 6
M Methoden Groß- und Kleinschreibung Java Basics - Anfänger-Themen 3
I Input/Output Wortanfang groß schreiben Java Basics - Anfänger-Themen 5
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S JTextArea mit LineWrap true viel zu groß! Java Basics - Anfänger-Themen 2
F Wie groß ist eigentlich ein HashMap? Java Basics - Anfänger-Themen 13
M Datentypen Wie groß kann ein Array max sein? Java Basics - Anfänger-Themen 9
N Variationen eines Strings - groß/klein Java Basics - Anfänger-Themen 3
T Border Layout alle mittleren felder gleich groß Java Basics - Anfänger-Themen 3
X Wie groß ist String[]? Java Basics - Anfänger-Themen 8
Daniel_L RegEx-Frage, Groß-/Kleinschreibung Java Basics - Anfänger-Themen 2
G Swing Komponente so groß wie Fenster Java Basics - Anfänger-Themen 10
P Swing Textarae so groß wie Panel? Java Basics - Anfänger-Themen 2
F Groß- und Kleinbuchstaben in String Java Basics - Anfänger-Themen 11
G Erster Buchstabe groß bzw. klein? Java Basics - Anfänger-Themen 4
T Ersten Buchstaben in einem Wort groß schreiben. Java Basics - Anfänger-Themen 6
T Entwder char auf groß oder klein prüfen, oder Exception Java Basics - Anfänger-Themen 3
M Strings: Groß-Kleinschreibung ignorieren Java Basics - Anfänger-Themen 6
A Groß-/Kleinbuchstabe Java Basics - Anfänger-Themen 2
G Groß- und Kleinschreibung Java Basics - Anfänger-Themen 13
N Groß- und Kleinschreibung vertauschen? Java Basics - Anfänger-Themen 3
C ein Canvas ist zu groß. mit Scrollbar ? Java Basics - Anfänger-Themen 8
W Zahl für longtype zu groß? Java Basics - Anfänger-Themen 2
G Klasse zu groß (>3000 codezeilen). wie sinnvoll strukturi Java Basics - Anfänger-Themen 9
K Erster Buchstabe groß Java Basics - Anfänger-Themen 7
MiMa String in Gross und Kleinbuchstaben umwandeln Java Basics - Anfänger-Themen 10
R Kleinbuchstaben in Großbuchstaben Java Basics - Anfänger-Themen 6
L Großbuchstaben in kleinbuchstaben wandeln Java Basics - Anfänger-Themen 5
J Bestimmen ob String aus Kleinbuchstaben besteht Java Basics - Anfänger-Themen 16
J Java-Array abwechselnd Gross- und Kleinbuchstaben Java Basics - Anfänger-Themen 5
D Vigenere KleinBuchstaben/Special Characters Java Basics - Anfänger-Themen 14
U Kleinbuchstaben in Großbuchstaben umwandeln Java Basics - Anfänger-Themen 5
H Großbuchstaben in Kleinbuchstaben Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben