Palindromtester

Xeno1987

Mitglied
halli hallo, hab mal wieder ein problem also hier die Aufgabenstellung:


a) Erstellen Sie zunächst das Teilprogramm, das den Übergabeparameter einliest, der Variablen
eingabekette vom Typ String zuweist und dann kontrolliert, ob die eingegebenen Zeichen
im Intervall zwischen a und z liegen. Sollte dies nicht der Fall sein, so soll das Programm
mit einer Fehlerausgabe und System.exit(1); beendet werden.

b) Konvertieren Sie die Zeichenkette eingabekette in die Zeichenkette gespiegeltekette,
so dass in dieser das erste Zeichen von eingabekette an letzter und das letzte Zeichen von
eingabekette an erster Stelle von gespiegeltekette steht.
Beispiel:
programmieren

nereimmargorp
Es sind die Inhalte beider Variablen auf dem Bildschirm auszugeben.
c) Vergleichen Sie die beiden Zeichenketten und geben dann aus, ob es sich um ein Palindrom
handelt oder nicht.

Hinweis:
Konvertieren Sie zunächst das übergebene String-Objekt in ein Char-Array-Objekt,
Siehe API zur Klasse String. Hierdurch ist es für Sie einfacher, zunächst die einzelnen
Zeichen zu kontrollieren und zu dem Char-Array-Objekt ein gespiegeltes Char-Array-
Objekt zu erzeugen. Für den String-Objektvergleich ist es erforderlich das gespiegelte
Char-Array-Objekt in ein String-Objekt zu konvertieren.

So bei mir haperts schon bei a)

Hier erst mal mein Code:

Java:
import java.lang.*;

public class Palindromtester{

   public static void main(String[] args){

      String eingabekette = args[0];

		char[] cArray = eingabekette.toCharArray();

      char[] alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','p','q','r','s','u','v','w','x','y','z'};
      
		

      for(char element : alphabet){
		
			System.out.println(element);
		}	
      


   }


}

Ich weiss nicht genau wie ich jetzt prüfen soll ob meine eingabe im intervall a-z liegt?
 

Xeno1987

Mitglied
hi

nicht so wirklich hab jetzt 2 schleifen geschrieben wo verglichen werden soll ob alle eingegebnene Buchstaben im Intervall alphabet liegen, klappt aber nicht so ganz:


Java:
import java.lang.*;

public class Palindromtester{

   public static void main(String[] args){

      String eingabekette = args[0];

		char[] cArray = eingabekette.toCharArray();

      char[] alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','p','q','r','s','u','v','w','x','y','z'};
      
			for(int i =0;i<cArray.length;i++){

				for(int j=0;j<alphabet.length;j++)
			
				if(alphabet[j] != cArray[i]) System.out.println("Error");

			}

      	/*for(char element : alphabet){
		
				System.out.println(element);
			}*/	
      


   }


}
 

Helgon

Bekanntes Mitglied
Ich würds einfach so machen.


Java:
String oldString= "level";
newString = new StringBuffer(oldString).reverse().toString();
// new String = level
if(oldString.equals(newString)) -> palindrom

Ist dochn Palindrom?
 
G

gassst

Gast
nicht so wirklich hab jetzt 2 schleifen geschrieben wo verglichen werden soll ob alle eingegebnene Buchstaben im Intervall alphabet liegen, klappt aber nicht so ganz:

Deine Schleifen sind richtig, aber über die if Abfrage musst du dir nochmal Gedanken machen, denn im Moment überprüfst du, ob jeder Eingabebuchstabe allen Buchstaben im Alphabet entspricht (geht natürlich nicht).

Ich würds einfach so machen.
Und was hat das mit der Aufgabe zu tun?
 

Xeno1987

Mitglied
ich bin echt am verzweifeln krieg noch nicht mal den ersten teil der aufgabe nicht hin.

Das blöde Programm soll nur gucken ob eines der Elemente was eingelesen werden sollte im alphabet enthalten ist oder nicht, damit ich auch mal anfangen das eigentliche programm zu schreiben.
 

Fab1

Top Contributor
Hiho,

hab mal hier einen Lösungsansatz für Aufgabe a)

Hatte gerade keinen besseren Lösungsweg parat. Hoffe es ist verständlich und so wie in der Aufgabe gewollt.

Java:
import java.awt.*;
import javax.swing.*;

public class Test {

	public static void main(String[] args) {

		String eingabekette = args[0];

		// Hier hab ich noch ein toLowerCase() --> Kleinbuchstaben angefügt.
		char[] cArray = eingabekette.toLowerCase().toCharArray();

		char[] alphabet = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
				'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 'u', 'v', 'w', 'x',
				'y', 'z' };

			/*
			 * breakCounter
			 * 
			 * Immer wenn ein Buchstabe vom String der Parameter Liste vorhanden ist, wird der Counter um eins erhöht.
			 * Die innere Schleife durchläuft ganz normal das abc wie du es auch gemacht hast. 
			 */
			int breakCounter = 0;
				
				for(int i = 0; i<cArray.length; i++){
					
					for(char a = 'a'; a<='z' ;a++){
						if(cArray[i] == a){
							breakCounter++;
							break;
						}
					}
				}
				if(breakCounter == cArray.length){
					System.out.println("Die Eingabe liegt innerhalb dem Intervall von a-z");
				}else{
					System.out.println("Die Eingabe liegt nicht innerhalb des Intervalls von a-z");
					System.exit(1);
				}

	}
}
 

Fab1

Top Contributor
Hätte auch den Rest der Aufgabe falls du ihn willst sag einfach Bescheid. Lass ihn mal hier gespeichert :)

Will dir ja jetzt nicht den Spaß am programmieren versauen ;)
 
A

anonymous423

Gast
Hätte auch den Rest der Aufgabe falls du ihn willst sag einfach Bescheid. Lass ihn mal hier gespeichert :)

Will dir ja jetzt nicht den Spaß am programmieren versauen ;)

Um Willen aller anderen Erstsemester, die sich später irgendwann mal mit der dann-Inkompetenz von "Xeno1987" - und allen anderen Kommilitonen, die sich irgendwie durch die Programmiermodule gemogelt haben -, wenn sie dann mal unfreiwillig in einem Projekt oder einer Übung mit ihm in einer Gruppe sein müssen, bitte ich dich, tu es nicht...
 

California

Aktives Mitglied
Also Buchstaben die zwischen 'a' und 'z' liegen kannst Du mit den Statischen Methoden von Character identifizieren:
Code:
Character.isLowerCase( ch )
ist true wenn ch zwischen 'a' und 'z' liegt...
Spart Dir das dämliche Array mit den Zeichen, so steht das auch nicht in der Aufgabe.
Wenn Du, wies wörtlich in der Aufgabe steht, vergleichen willst, ob ein Character ch zwischen 'a' und 'z' liegt, geht das mit
Code:
 ((ch.compareTo( 'a' ) >= 0) && (ch.compareTo( 'z' ) <= 0))
Und StringBuffer.reverse ist doch nicht verboten worden, oder?
Code:
String rueckwaerts = new StringBuffer( vorwaerts ).reverse().toString();
macht doch ganz genau das in b) geforderte ;-) Natürlich solltest Du die Doku dazu lesen und verstehen, was das tut, was Du benutzt hast.
Es ist immer besser, vorhandene Standardmethoden aus Standardklassen zu verwenden, als dasselbe nochmal selbst neu zu schreiben. Wäre ich dein Ausbilder, wäre es mir für diese Dinge wichtiger, dass Du die Standardfunktionen findest und anwendest.
 

Xeno1987

Mitglied
habs auch verstanden lag wirklich nur an der einen blöden stelle mit der 2 schleife. Danke erstmal, den Rest bekomme ich schon hin:)

und an anonymous wenn du mich als inkompetent bezeichnest dann solltest du mich kenne andernfalls weisst du überhaupt nichts von mir.

Nur weil ich mal ne blockade habe heisst das noch lange nicht dass ich nicht programmieren kann!
 

Fab1

Top Contributor
Und StringBuffer.reverse ist doch nicht verboten worden, oder?
Code:
String rueckwaerts = new StringBuffer( vorwaerts ).reverse().toString();
macht doch ganz genau das in b) geforderte ;-) Natürlich solltest Du die Doku dazu lesen und verstehen, was das tut, was Du benutzt hast.
Es ist immer besser, vorhandene Standardmethoden aus Standardklassen zu verwenden, als dasselbe nochmal selbst neu zu schreiben. Wäre ich dein Ausbilder, wäre es mir für diese Dinge wichtiger, dass Du die Standardfunktionen findest und anwendest.

Natürlich ist es sinnvoll bereits vorhandene Klassen und Methoden zu verwenden. Aber ich glaube nicht das es im Willen des Lehrers liegt hier mit reverse zu arbeiten. Am besten einfach beide Varianten angeben und evtl. auskommentieren, dann machst du sicherlich nichts falsch.
 

Xeno1987

Mitglied
hallo,

also habs doch hinbekommen hier der gesamte code und danke an fab für die korrektur des ersten teils:)

Java:
import java.lang.*;
 
public class Palindromtester{
 
   public static void main(String[] args){
 
      String eingabekette = args[0];

		
 
        char[] cArray = eingabekette.toCharArray();

		  char[] temp = new char[cArray.length];

		  String reverse = "";
 
      char[] alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','p','q','r','s','u','v','w','x','y','z'};
      
            int counter = 0;
                
                for(int i = 0; i<cArray.length; i++){
                    
                    for(char a = 'a'; a<='z' ;a++){
                        if(cArray[i] == a){
                            counter++;
                            break;
                        }
                    }
                }
                if(counter == cArray.length){
                    System.out.println("Die Eingabe liegt innerhalb dem Intervall von a-z");
                }else{
                    System.out.println("Die Eingabe liegt nicht innerhalb des Intervalls von a-z");
                    System.exit(1);
                }

			
				for(char c : cArray){ 
			
					reverse=c+reverse;		

				}

			System.out.println("Der eingegebene String: "+eingabekette+"\n"+"Der reverse String: "+reverse);


			if(eingabekette.equals(reverse)){

				System.out.println("Es handelt sich um ein Palindrom!");

			} else{

					System.out.println("Es handelt sich nicht um ein Palindrom!");
				}
    }
}
 

Illuvatar

Top Contributor
Hi,
ich hätte noch zwei kleine Anmerkungen:

  • Ganz am Anfang des Programms wäre es sinnvoll, eine Abfrage einzubauen, ob überhaupt ein Parameter übergeben wurde:
    Java:
    if (args.length > 0)
    sonst gibt es beim Ausführen gleich in der ersten Zeile einen Fehler.
  • Dein
    Code:
    char[] alphabet
    brauchst du jetzt ja nicht mehr, es wird nirgends mehr verwendet, du kannst es also weglassen. Du scheinst ja also schon bemerkt zu haben, dass Java zwischen Zahlen und Buchstaben keinen Unterschied macht, weshalb die Schleife so:
    Java:
    for(char a = 'a'; a<='z' ;a++)
    geschrieben werden kann. Der nächste Schritt wäre nun: Um zu Überprüfen, ob eine Zahl in einem Intervall liegt, würdest du ja auch nicht durch alle Zahlen des Intervalls iterieren. Das geht nämlich auch einfacher:
    Java:
    if (cArray[i] >= 'a' && cArray[i] <= 'z')
 

Neue Themen


Oben