Palindrom in zweidimensionalem Array

Lazyyy

Mitglied
Hallo Zusammen,
ich arbeite derzeit an einer Aufgabe bei der ich zuerst einen String in ein Palindrom umwandeln soll (ich mache dies über ein Chararray).
Und anschliesend in einem zweidimensionalem Array auf bestimmte Weise unterbringen soll.

Von links oben nach rechts oben,
von links oben nach links unten,
von links oben nach rechts unten,
von rechts oben nach rechts unten,
von links unten nach rechts oben,
von links unten nach rechts unten.

Code:
public static char[][] palindromArray(String s) {
       char[] inhaltS = s.toCharArray();
       char[] palindrom = new char[(inhaltS.length * 2) - 1];

       for (int i = 0; i < inhaltS.length; i++) {
           palindrom[i] = inhaltS[i];
           palindrom[palindrom.length - i-1] = inhaltS[inhaltS.length - i-1];
       }

       char[][] result = new char[palindrom.length][palindrom.length];

       for (int i = 0; i < palindrom.length; i++) {
           result[i][0] = palindrom[i];
           for (int j = 0; j < palindrom.length; j++) {
               result[0][j] = palindrom[j];
               if (i == j) {
                   result[i][j] = palindrom[j];
               }
           }
       }

       return result;
   }

Zum einen komme ich von der Logik nicht darauf wie ich von links unten nach rechts oben eintragen kann und zum anderen bin ich mir beim Palindrom nocht sicher.

Zusatzfrage: Wenn ich eine Klasse Programm habe wie kann ich die Klasse Palindrom am besten aufrufen um zwischenschritte zu Testen.

Vielen Dank schon einmal
Lazy
 

VfL_Freak

Top Contributor
Moin,
ich verstehe offen gestanden kein Wort!! :confused:

* was für eine Klasse 'Programm'?
* was für eine Klasse 'Palindrom'?
* wie sieht denn bei 'palindromArray' der Eingabestring aus?

* was soll mir dies hier sagen?
Von links oben nach rechts oben,
von links oben nach links unten,
von links oben nach rechts unten,
von rechts oben nach rechts unten,
von links unten nach rechts oben,
von links unten nach rechts unten.

Fragen über Fragen :rolleyes:
Vg Klaus
 

MoxxiManagarm

Top Contributor
String in ein Palindrom umwandeln
Rein vom Wording ist das nicht korrekt. Ein Palimdrom ist kein Datentyp (außer du hast eine eigene Klasse dafür). Umwandeln kannst du es daher nicht direkt. Du könntest Testen, ob der String, welcher dir vorliegt, ein Palimdrom ist - oder eben - du ergänzt den String so, dass er ein Palimdrom wird undabhängig davon, ob er danach noch ein echtes Wort ist. Du könntest also z.B. aus 'HAUS' 'HAUSUAS' machen, oder aus 'MANN' MANNAM'. Auf dem ersten Blick würde ich sagen dein Code macht vermutlich diese Erweiterung. Aber vermutlich würdest du im Fall von 'MANN' 'MANNNAN' erstellen. Natürlich ist das auch ein Palimdrom, aber ggf. sollst du das kürzeste wählen und das hätte hier ein N weniger.


Zum Verständnis, Weil auch mir deine Aufgabe nicht ganz klar ist. Soll sowas gemacht werden, dass du z.B. aus REITTIER folgendes bekommst:
Code:
R E I T T I E R
E E . . . . E E
I . I . . I . I
T . . T T . . T
T . . T T . . T
I . I . . I . I
E E . . . . E E
R E I T T I E R

Und aus 'NEBEN' das:
Code:
N E B E N
E E . E E
B . B . B
E E . E E
N E B E N
 
Zuletzt bearbeitet:

Lazyyy

Mitglied
der obere Code steht praktisch in der Klasse Palindrom.
Die Klasse Programm habe ich erfunden / könnte auch Klasse Test sein.
Gedanke: um zwischenergebnisse herauszuholen.

Und betrachtet man das Quadratische Array zb wie ein Schachbrett dann sollten nach den Richtungsangaben die Felder belegt werden .. sprich einige sind leer.

der Input ist eine Großbuchstabenfolge. :)
 

Lazyyy

Mitglied
Rein vom Wording ist das nicht korrekt. Ein Palimdrom ist kein Datentyp (außer du hast eine eigene Klasse dafür). Umwandeln kannst du es daher nicht direkt. Du könntest Testen, ob der String, welcher dir vorliegt, ein Palimdrom ist - oder eben - du ergänzt den String so, dass er ein Palimdrom wird undabhängig davon, ob er danach noch ein echtes Wort ist. Du könntest also z.B. aus 'HAUS' 'HAUSUAS' machen, oder aus 'MANN' MANNAM'. Auf dem ersten Blick würde ich sagen dein Code macht vermutlich diese Erweiterung. Aber vermutlich würdest du im Fall von 'MANN' 'MANNNAN' erstellen. Natürlich ist das auch ein Palimdrom, aber ggf. sollst du das kürzeste wählen und das hätte hier ein N weniger.


Zum Verständnis, Weil auch mir deine Aufgabe nicht ganz klar ist. Soll sowas gemacht werden, dass du z.B. aus REITTIER folgendes bekommst:
Code:
R E I T T I E R
E E . . . . E E
I . I . . I . I
T . . T T . . T
T . . T T . . T
I . I . . I . I
E E . . . . E E
R E I T T I E R

Und aus 'NEBEN' das:
Code:
N E B E N
E E . E E
B . B . B
E E . E E
N E B E N

genau so ist es gedacht.
 

MoxxiManagarm

Top Contributor
Du hast aus meiner Sicht 2 Problemstellungen

1. Das Minimale ergänzte Palimdrom finden. Ich bezweifle dass alle anderen akzeptiert werden, auch wenn es sich bei diesen rein nach Definition auch um Palimdrome handeln würde.
Java:
public class PalimdromBuilder {

    public static String buildPalimdrom(String input) {
        String forward = input.toUpperCase();
        String backward = new StringBuilder(forward).reverse().toString();
      
        for(int i = 0; i < forward.length(); i++) {
            String sub1 = forward.substring(i, forward.length());
            String sub2 = backward.substring(0, backward.length() - i);
          
            if(sub1.equals(sub2)) {
                backward = backward.replaceFirst(sub2, "");
                break;
            }
        }
      
        return forward + backward;
    }
  
    public static void main(String[] args) {
        System.out.println(buildPalimdrom("ANNA"));
        System.out.println(buildPalimdrom("MANN"));
        System.out.println(buildPalimdrom("HAUS"));
    }
}

Ausgabe:
Code:
ANNA
MANNAM
HAUSUAH

2. Das Palimdrom aus 1. in das Gitter packen.
- Das Gitter hat die Größe nxn mit n=palimdrom.length()
- Du hast 6 'Pfade', welche du alle in einer Schleife abfrühstücken kannst.
 
Zuletzt bearbeitet:

Lazyyy

Mitglied
Die Idee das Palimdrom noch aus dem String zu erstellen gefällt mir gut und leuchtet ein. Danke dafür!

In meiner Lösung hat es sich meiner Meinung nach, nach drei Pfaden "ausgefrühstückt" und ich komme nicht auf die Restlichen. :/
 

MoxxiManagarm

Top Contributor
Vermutlich hast du nur die ersten 3. Füge n als feste Größe mit ein.

Java:
//Von links oben nach rechts oben,
array[0][i]
//von links oben nach links unten,
array[i][0]
//von links oben nach rechts unten,
array[i][i]
//von rechts oben nach rechts unten,
array[n][i]
//von links unten nach rechts oben,
array[n-i][i]
//von links unten nach rechts unten.
array[i][n]
 

httpdigest

Top Contributor
Interessantes Problem, das mit dem minimalen Palindrom durch rechts anfügen zu bilden. Wollte hier auch mal eine eigene Lösung bauen:
Java:
public static String buildPalindrome(String input) {
    String extension = "";
    /*
     * Idee: Laufe den String von links nach rechts ab und prüfe, ob
     * der String von rechts nach links abgelaufen derselbe wäre.
     * Immer, wenn er es nicht ist, füge den von links nach rechts
     * abgelaufenen Buchstaben zu "extension" hinzu.
     */
    for (int i = 0, j = input.length() - 1; i < j; i++, j--) {
        if (input.charAt(i) != input.charAt(j)) {
            extension = input.charAt(i) + extension;
            j++; // <- bleibe erstmal auf dem Buchstaben
        }
    }
    return input + extension;
}

EDIT: Mist, das funktioniert so nicht. :) Bitte ignorieren o_O
 

MoxxiManagarm

Top Contributor
Ich habe es mir einfach bildlich vorgestellt. Meine Lösung kann man sich so gedanklich nachstellen:
Das Wort auf einen Papierstreifen vorwärts schreiben.
Das Wort auf einen Papierstreifen rückwärts streiben
Beide Papierstreifen übereinanderlegen
Die Papierstreifen solange verschieben (auseinanderziehen), bis die sich überlappenden Teile identisch sind
Schere nehmen und den identischen Teil vom Rückwärts-Streifen abschneiden
Beide Streifen zusammenfügen.

Du bist ja an sich gut darin noch optimierte Lösungen zu finden httpdigest. Ich bin gespannt, ob du deinen Fehler noch findest oder gar einen anderen Weg und wie ich mir diesen verbildlichen kann :)
 

MoxxiManagarm

Top Contributor
Ich glaube ich habe gerade verstanden, was du mit deinem Ansatz abbilden wolltest.
Mein "überlappender" Streifen, ist immer selbst ein Palindrom welches hinten am Wort ist.

ANNA
BASIS
MANN

Eventuell hilft dir diese Formulierung bei der Fehlersuche :)
 

Lazyyy

Mitglied
Vermutlich hast du nur die ersten 3. Füge n als feste Größe mit ein.

Java:
//Von links oben nach rechts oben,
array[0][i]
//von links oben nach links unten,
array[i][0]
//von links oben nach rechts unten,
array[i][i]
//von rechts oben nach rechts unten,
array[n][i]
//von links unten nach rechts oben,
array[n-i][i]
//von links unten nach rechts unten.
array[i][n]

das wäre dann einfach so gedacht?:
Code:
int n = palimdrom.length;
       
       for (int i = 0; i < palimdrom.length; i++) {
           
           result[i][0] = palimdrom[i];
           result[0][i] = palimdrom[i];
           result[i][i] = palimdrom[i];
           result[n][i] = palimdrom[i];
           result[i][n] = palimdrom[i];
           //result[n-i][i] = palimdrom[i];

       }

wieso geht letzteres über die Grenzen des Arrays hinaus ?
 

Lazyyy

Mitglied
Der aktuelle Stand sieht praktisch so aus:
wobei das "einpflanzen" nicht funktioniert.

Code:
public class PalindromArray {

   public static char[][] palindromArray(String s) {
      
           String result;
           String forward = s.toUpper();
           String backward = new StringBuilder(forward).reverse().toString();
      
           for(int i = 0; i < forward.length(); i++) {
               String sub1 = forward.substring(i, forward.length());
               String sub2 = backward.substring(0, backward.length() - i);
        
              
               if(sub1.equals(sub2)) {
                   backward = backward.replaceFirst(sub2, "");
                   break;
               }
           }
           result = forward + backward;
      
       char[] palimdrom = result.toCharArray();
      
       char[][] result2 = new char[palimdrom.length][palimdrom.length];
       int n = palimdrom.length;
      
       for (int i = 0; i < palimdrom.length; i++) {
          
           result2[i][0] = palimdrom[i];
           result2[0][i] = palimdrom[i];
           result2[i][i] = palimdrom[i];
           result2[n][i] = palimdrom[i];
           result2[i][n] = palimdrom[i];
           result2[n-i][i] = palimdrom[i];

       }

       return result2;
   }

}
 

MoxxiManagarm

Top Contributor
Eventuell war es irritierend, dass ich es n genannt hatte, entschuldige. Es ist eine feste Größe, muss aber ganz normal wie beim Array

Java:
int n = palindrom.length - 1;

sein. Außerdem hatte ich in meinem Beispiel ein Schreibfehler drin. Es heißt Palindrom. Stört das Programm natürlich nicht, aber wir wollen doch korrekt bleiben :)
 

Lazyyy

Mitglied
->
Code:
 char[][] result = PalindromArray.[palindromArray]("FF");
  result erwartet: char[][] mit Länge 3 = {
     char[] mit Länge 3 = {
     'F',
     'F',
     'F'
  },
     char[] mit Länge 3 = {
     'F',
     'F',
     'F'
  },
     char[] mit Länge 3 = {
     'F',
     'F',
     'F'
  }
  }
  tatsächlich: char[][] mit Länge 2 = {
     char[] mit Länge 2 = {
     'F',
     'F'
  },
     char[] mit Länge 2 = {
     'F',
     'F'
  }
  }
 

MoxxiManagarm

Top Contributor
Sagt das dein Vorgegebener Tester? Dann erwartet ihr vermutlich doch nicht das minimale Palindrom...
Halte ich für fragwürdig aber ok. Dann vergiss meinen Lösungsvorschlag und nimm doch wieder nur den letzten Buchstaben... Jedenfalls weißt du wie es gehen würde ;-)
 
Ä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
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 mit Groß & kleinbuchstaben Java Basics - Anfänger-Themen 19
M Palindrom Test mit Char-arrays! Java Basics - Anfänger-Themen 3
L Insertion Sort bei zweidimensionalem Array Java Basics - Anfänger-Themen 7
F NullpointerException bei zweidimensionalem Array Java Basics - Anfänger-Themen 2
S NullPointerException bei zweidimensionalem JLabel-Array Java Basics - Anfänger-Themen 4
S Methode mit zweidimensionalem Array als Parameter: '.class' expected Java Basics - Anfänger-Themen 2
G array[][].length bei zweidimensionalem Array? Java Basics - Anfänger-Themen 4
0 Häufigste(n) Zahl(en) in zweidimensionalem Array bestimmen ? Java Basics - Anfänger-Themen 2
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben