Palindrom Eigenschaft mittels Array testen

Tuts4you

Erfahrenes Mitglied
Hallo :)
Ich hab wieder einmal eine Frage zur Realisation eines Java- Problems...
--> Palindrom- Eigenschaft mittels eines Arrays testen...

dh ein Wort muss von vorne und von hinten gelesen einen "SINN" ergeben wie zB Rentner...

PHP:
package praktikum.ab3;
import esop.simpleIO.*;

public class aufgabe7 {

    
    
    public static void main(String[] args) {
        char a[] = new char[7];
        boolean check = false;
        
        
        for (int i = 0; i < a.length; i++){
            Out.println("Bitte geben Sie einen Buchstaben ein! Max. 7!");
            a[i] = In.readChar();
            
        }
            
        
            for (int j = 0; j < a.length; j++) {
                
                if (a[j] == a[(a.length-1)-j]){
                    check = true;
                }
                else {
                    check = false;
                }
                    
            
        }
            if (check == true){
                Out.println("Übereinstimmung");
            }
                else {
                    Out.println("Keine Übereinstimmung!");
            }
    }
}
So das funktioniert auch ABER...
Wie kann ich ein Array Element erzeugen dass aus n- Elementen besteht (ev. durch die Eingabe des Benutzers?) --> "Wieviele Buchstaben hat das Wort?! Hört sich ein wenig doof an...
und wenn nicht --> wie kann ich eine Abbruchbedingung machen?
und beim Testen der einzelnenen Array Elemente gibt er mir immmer "Überinestimmung" oder "Keine Übereinstimmung" aus... Jetzt hab ich das ganze mit einem Booleschen Wert versucht, den ich mit "false" intitialisiere und bei den Bedingungen mit true oder wieder mit false fülle...so, ist der letzte Werte "true" (auch wenn das Wort nicht übereinstimmt - gibt er mir true aus und umgekehrt...)

Könnt ihr mir helfen? bzw. versteht ihr meine Problemstellung?
Danke im vorraus, Michael
 
Zuletzt bearbeitet:
Hi,

versuchs mal hiermit: (ist vielleicht nicht ganz hübsch, aber er sollte noch funktionieren)

Java:
// import
import java.util.*;

class PalindromTester {

  /**
   * standard constructor
   */
  public PalindromTester() {

  }

  //boolean variable if input is palindrom
  static boolean isPalindrom = true;

  /**
   * The main method comprised the output and method calls.
   *
   * @param args String array input in the command line statement
   */
  public static void main(String[] args) {

    /*
     * String variable singleString gets the transformed input from makeString
     * method
     */
    String singleString = makeString(args);

    // output of the input args
    System.out.print("The passed sentence is: ");
    for (int i = 0; i < args.length; i++) {
      if (i != args.length - 1) {
        System.out.print(args[i] + " ");
      }
      else {
        System.out.print(args[i]);
        System.out.println();
      }
    }

    // output of the formated sentence
    System.out.println("Single String created is: " + singleString);
    System.out.println();

    // output past palindrom request
    if (isPalindrom) {
      System.out.println(singleString + " is a Palindrom.");
    }
    else {
      System.out.println(singleString + " isn't a Palindrom.");
    }

  }

  /**
   * This method creates of the String array a String in lower case form.
   * Special characters will be deleted.
   *
   * @param aSentence the String args of the main method
   * @return variable inString with low letters
   */
  public static String makeString(String[] aSentence) {

    // variable declarations
    String inString = "";
    String tokenDelim = "!\"§$%&/=?'`#*+-[]°^.,;:|<>\\";

    // creates a String of a String array
    for (int i = 0; i < aSentence.length; i++) {
      inString = inString + aSentence[i];
    }

    // inString to lower case --> low letters
    inString = inString.toLowerCase();

    // new object of the class StringTokenizer
    StringTokenizer st = new StringTokenizer(inString, tokenDelim);

    // new declaration of the inString variable
    inString = "";

    // the String inString will be composed of the several tokens
    while (st.hasMoreTokens()) {
      inString = inString + st.nextToken();
    }

    // new object of class StringBuffer
    StringBuffer sb1 = new StringBuffer();

    // StringBuffer buffString gets the value of inString
    StringBuffer buffString = sb1.append(inString);

    // new object of class PalindromTester

    // method call getSubString with buffString
    getSubString(buffString);

    return inString;

  }

  /**
   * This method fetches the subStrings and consigns the subString to method
   * isPalindrom and calls getSubString again without the consigned subString.
   * If there weren't any subStrings the method calls method isPalindrom.
   *
   * @param buffString the returned value of the makeString method
   */
  public static void getSubString(StringBuffer buffString) {

    if (buffString.indexOf("(") != -1 && isPalindrom) {

      // initialisation of the variables
      int start = buffString.indexOf("(");
      int startCount = 0;
      int end = buffString.indexOf(")");
      int endCount = 0;
      String stringWhile = buffString.substring(start + 1, end);
      StringBuffer stringBuffWhile;

      // while loop until ( is in String StringWhile
      while (stringWhile.indexOf("(") != -1) {

        // new object of StringBuffer
        StringBuffer sb = new StringBuffer();

        endCount = stringWhile.length();

        int startWhile = stringWhile.indexOf("(") + 1;
        startCount = startCount + startWhile;

        stringBuffWhile = sb.append(stringWhile);
        stringWhile = stringBuffWhile.substring(startWhile, endCount);

      }

      // new boolean value for static boolean isPalindrom
      isPalindrom = isPalindrom(stringWhile);

      buffString = buffString.delete(startCount + start, end + 1);
      getSubString(buffString);
    }
    else {
      isPalindrom = isPalindrom(buffString.toString());
    }
  }

  /**
   * This method tests if a consigned value is a palindrom.
   * The consigned value will be inverted and checked for equality. After the
   * boolean true = palindrom and false = no palindrom will be returned
   *
   * @param aString String computed in getSubString method
   * @return The boolean true if invertString equals aString. Else return false.
   */
  public static boolean isPalindrom(String aString) {

    // variable declaration
    String invertString = "";

    /*
     * the loop invert the StringBuffer buffString and store the value in
     * String variable invertString
     */
    for (int i = aString.length() - 1; i >= 0; i--) {
      invertString = invertString + aString.charAt(i);
    }

    // equality request
    if (invertString.equals(aString) && isPalindrom) {
      return true;
    }
    else {
      return false;
    }
  }
}

Gruß
-- Romsl
 
mhm...danke für deine schnelle Antwort :) Lösung scheint nicht schlecht zu sein...aber gibt es denn keine einfachere? da versteh ich überhautp nix mehr :)
 
wär das nicht so zu lösen?...
die Buchstaben einlesen und dann

PHP:
do {
die for-schleife die die einzelnen Array- Elemente ausliest
die Bedingung...==
wenn ja dann check = true
wenn nicht check = false
}
while (check == false)
 
Wie kann ich ein Array Element erzeugen dass aus n- Elementen besteht (ev. durch die Eingabe des Benutzers?) --> "Wieviele Buchstaben hat das Wort?! Hört sich ein wenig doof an...

Java:
// eingebeneZeichenkette ist der String, den du durch BufferedReader oder so einliest ..

int zeichenKettenLaenge = eingegebeneZeichenkette.length();
String[] einArray = new String[zeichenKettenLaenge];

Gruß teppi
 
danke :) hab das so realisiert:
PHP:
do {
        Out.println("Wie lange soll das eingegebene Wort sein? ...gerade Zahl!");
        laenge = In.readInt();
        }
        while (laenge%2 != 0);
        
        
        char a[] = new char[laenge];
 
So, was haltet ihr von diesem Lösungsvorschlag:
PHP:
package praktikum.ab3;
import esop.simpleIO.*;

public class aufgabe7 {

	
	private static void palindrom_check(boolean check, char[] a) {
		if (check == true){
			Out.print("Das eingegebene Wort lautet: ");
			for (int i = 0; i <a.length; i++){
				Out.print(a[i]);
			}
			Out.println("\nEs handelt sich hier um ein Palindrom!");
		}
		else {
			Out.print("Das eingegebene Wort lautet: ");
			for (int i = 0; i <a.length; i++){
				Out.print(a[i]);
			}
			Out.println("\nEs handelt sich hier nicht um ein Palindrom!");
		}
	}
	
	
	public static void main(String[] args) {
		int laenge;
		boolean check = false;
				
		do {
		Out.println("Wie lange soll das eingegebene Wort sein? ...gerade Zahl!");
		laenge = In.readInt();
		}
		while (laenge%2 != 0);
		
		
		char a[] = new char[laenge];
	
		
		
		Out.println("Bitte geben Sie jeden Buchstaben einzeln ein!");
		for (int i = 0; i < a.length; i++){
			a[i] = In.readChar();
		}
		
		for (int j = 0; j < a.length; j++){
			
			if (a[j] == a[(a.length-1)-j]){
				check = true;
							}
			else {
				j = a.length;
				check = false;
			}
			
		}
		palindrom_check(check, a);
		
		}

	
		
	}
 
Zuletzt bearbeitet:
Wozu soll der Benutzer jeden Buchstaben einzeln eingeben? Ist das nicht ein bissel ähm hohl .. und wieso hat ein Palindrom nur eine gerade Anzahl an Buchstaben .. Hört sich jedenfalls sehr merkwürdig an.

Gruß Stefan
 
naja, das mit der geraden Zahl --> da hast recht...
ich hab das so gelöst:

PHP:
package praktikum.ab3;
import esop.simpleIO.*;

public class aufgabe7 {

    
    
    // Methode für das Überprüfen, ob das eingegebene Wort ein Palindrom ist, oder nicht
    private static void palindrom_check(boolean check, char[] a) {
        
        Out.print("Das eingegebene Wort lautet: ");
        for (int i = 0; i < a.length; i++){
            Out.print(a[i]);                     //Wortausgabe
        }
        if (check == true) {                    //wenn check "true" dann Palindrom
            Out.println("\nPalindrom- Eigenschaft vorhanden!");
        }
        else {                                    //wenn check "false" kein Palindrom
            Out.println("\nPalindrom- Eigenschaft nicht vorhanden!");
        }
    }
        
    
    
    public static void main(String[] args) {
        int laenge;
        boolean check = false;
                
        
        Out.println("Wie lange soll das eingegebene Wort sein?");
        laenge = In.readInt();            //Länge des Arrays wird eingelesen
                
        char a[] = new char[laenge];    //neues Array wird erzeugt
    
        
        
        Out.println("Bitte geben Sie jeden Buchstaben einzeln ein!\n");
        for (int i = 0; i < a.length; i++){
            Out.println(i+1+". Buchstabe:");
            a[i] = In.readChar();        //Werte werden in das Array eingelesen
        }
        
        for (int j = 0; j < a.length; j++){
            
            if (a[j] == a[(a.length-1)-j]){
                check = true;            //hier wird überprüft ob a[j] == a[(a.length-1)-j] ist
                                        //wenn ja, dann true
                            }
            else {
                j = a.length;            //wenn nein, dann erhält j die Länge des Arrays
                check = false;            //und somit gibt die Schleifenbedingung true aus und ist beendet
            }
            
        }
        palindrom_check(check, a);         //Methode palindrom_check wird aufgerufen
        
        }

    
        
    }

funktioniert - ist vielleicht etwas kompliziert --> aber ich bin zufrieden damit! danke!

lg Michael
 
Zurück