Palindrom Test

Kaa27

Mitglied
Hallo, ich soll ein Zahlenarray darauf testen, ob es ein Palindorm ist (true/false)


Hier mein Code

Java:
	 static boolean isPalindrom(int[] meinArray) {
	
		int rueck[] = umkehren(meinArray);
		if (meinArray.equals(rueck)) {
			return true;
		}else
		return false;
	}//end isPalindrom

Das Problem ist ist, dass wenn ich nun mein Programmstarte, gibt es mir kein true/false aus, sondern es wiederholt die Methode umkehren.


Siehe hier:

Java:
		System.out.println("");
		ausgeben(meinArray);

		System.out.println(" ");
		replizieren(meinArray, laenge);

		System.out.println("");
		umkehren(meinArray);

		 System.out.println("");
		 isPalindrom(meinArray);

So dass in meiner Console folgendes erscheint(wenn ich 1,2,3 als Eingabe habe):

Das Array wird nun Rükwärts ausgegeben
3 2 1
Das Array wird nun Rükwärts ausgegeben
3 2 1

grüße
 
Meinst du nicht dass das Problem dann vielleicht in der Methode umkehren liegt und du die zeigen solltest? 😉
 
.. ja klar, sorry.

Java:
	static int[] umkehren(int[] meinArray) {

		System.out.println("Das Array wird nun Rükwärts ausgegeben");
		int laenge = meinArray.length;
		for (int j = laenge - 1; j >= 0; j--) {
			System.out.print(meinArray[j] + " ");
		}
		return meinArray;

	}// end umkehren
 
Ich habe zuerst eine Kopie des Arrays erstellt und mich dann dem letzten Wert der Kopie dem ersten des alten zugewiesen usw...

Java:
    public static int[] umkehren(int[] a) {
        
        int [] b = new int [a.length]; // Erzeuge erstmal ein Array in das ich zwischenspeichern kann
        
        for(int i = 0 ; i < a.length ; i++) {
        	b[i] = a[i]; } //erstelle dann eine Kopie (Mit For-Schleife wegen Ref. Variable und so)
        	
        for (int i = 0 ; i < a.length ; i++)
            a[i] = b[(a.length-1)-i]; // und weise dann den ersten Wert des Alten Array dem letzten dem Wert des neuen zu
           
            return a; //und gebe das alte dann wieder (nun aber umgekehrt) zurück
        
        
    }

Grüße aus der gleichen Uni 😉
 
@Klassensprecher: Dein Ansatz ist schon korrekt, aber wozu machst du denn in der ersten Schleife eine Kopie von a, wenn du es dann in der zweiten Schleife ohnehin veränderst? Spar dir doch die erste Schleife, verändere b in der zweiten Schleife und gib b zurück. Dann bleibt dir a erhalten. In etwa so:
Java:
	public static int[] umkehren(int[] a) {
		int[] b = new int[a.length];

		for (int i=0 ; i<a.length; i++)
			b[i] = a[(a.length-1)-i];

		return b;
	}

Trotzdem frage ich mich, wieso ihr das so umständlich lösen wollt - schaut euch doch einmal den Aufbau eines Palindroms an: Die erste Ziffer ist ident mit der letzten, die zweite mit der vorletzten, ... etc. Da muss man nichts umkehren, eine Schleife mit einer if-Abfrage reicht aus.
 
Umkehren und Palindrom sollen ja unabhängig voneinander sein.

Aber das mit dem b zurückgeben ist deutlich einfacher das stimmt.
Habe da einen Kleinen Gedankenfehler gehabt und gedacht das man immer die Variable die Oben reinkommt auch wieder zurückgeben muss. Ist aber natürlich quatsch.
 
.. ja klar, sorry.

Java:
	static int[] umkehren(int[] meinArray) {

		System.out.println("Das Array wird nun Rükwärts ausgegeben");
		int laenge = meinArray.length;
		for (int j = laenge - 1; j >= 0; j--) {
			System.out.print(meinArray[j] + " ");
		}
		return meinArray;

	}// end umkehren

EikeB hats schon gesagt: Du gibst 'meinArray' unverändert zurück. Das ist wohl der Kern.

Aber noch viel schlimmer: Du machst in der Routine ja garnichts, was mit dem Namen zu tun hat.
Die Methode müsste also so was wie "rückwärtsAnzeigen" heißen und nicht "umkehren".
Eine Veränderung in der Anzeige hat nichts mit Umkehren der Daten zu tun.

Deshalb ist auch deine Schlussfolgerung im 1. Post falsch: "es wiederholt die Methode umkehren."
Denn dann müsste die Reihenfolge ja wieder wie im Original sein.

Letzlich ist einfach die Ausgabe in deiner umkehr-Methode fehl am Platz.
(Außer du hast sie zu Debug-Zwecken eingebaut.)
Und in deinem main() fehlt aber die Ausgabe.
das Main sollte von der Struktur so heißen:
Java:
        System.out.println("Original: "+meinArray);
        System.out.println("repliziert: "+ replizieren(meinArray, laenge));
        System.out.println("umgekehrt: "+ umkehren(meinArray));
        System.out.println("ist Palindrom"+ isPalindrom(meinArray));
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben