Strings auf Gleichheit prüfen - Aufgabe vom Prof.

  • Themenstarter Themenstarter Gelöschtes Mitglied 67695
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 67695

Gast
Hallo, ich muss eine Aufgabe von meinen Prof bearbeiten, in der es darum geht Anagramme (= zwei Wörter sind gleich) zu finden.

Ich habe nur eine Frage, an einer Stelle im Code habe ich einen Fehler und in die Lösungen gesehen. Die Lösung gibt mir das vor:

Java:
// Erzeuge eine modifizierbare Kopie von s2
            StringBuffer sb2 = new StringBuffer(s2);

            // Streiche in s2 vorhandene Buchstaben in s1 aus (hier: entfernen)
            for (int i=0; i<s1.length(); i++) {
                int pos = sb2.toString().indexOf(s1.charAt(i));
                if (pos != -1) {
                    sb2.deleteCharAt(pos);
                }
An der Stelle verstehe ich das einsetzen der Int-Variable "pos" nicht. Warum ist die hier notwendig?
 
Zuletzt bearbeitet von einem Moderator:
Was da passiert:
* Es wird das Zeichen an der Stelle i aus s1 gelesen
* Es wird geschaut, an welcher Stelle in sb2 dieses Zeichen auch steht (Stelle = pos)
* Dort wird es dann entfernt

Dafür braucht man sinnvollerweise eine Hilfsvariable - hier pos. Den ein Aufruf von deleteCharAt mit -1 würde eine Exception werfen.

Wenn dir das nicht hilft, versuch mal deine Frage genauer zu stellen, welche Zeile du warum nicht verstehst. Wie es deiner Meinung nach anders gehen würde. Dann kann man dir ggf. besser helfen
 
Was da passiert:
* Es wird das Zeichen an der Stelle i aus s1 gelesen
* Es wird geschaut, an welcher Stelle in sb2 dieses Zeichen auch steht (Stelle = pos)
* Dort wird es dann entfernt

Dafür braucht man sinnvollerweise eine Hilfsvariable - hier pos. Den ein Aufruf von deleteCharAt mit -1 würde eine Exception werfen.

Wenn dir das nicht hilft, versuch mal deine Frage genauer zu stellen, welche Zeile du warum nicht verstehst. Wie es deiner Meinung nach anders gehen würde. Dann kann man dir ggf. besser helfen
Ich hatte es so Programmiert, weil ich dachte, dass das auch mit i geht, da das ja die Position in dem String ist und beide gleich lang sind.

Java:
if (s1.length() == s2.length()) {
            StringBuffer sb2 = new StringBuffer (s2);
           
            for (int i = 0; i < s1.length(); i++) {
                if (s1.charAt(i) == sb2.toString().charAt(i)) {
                    sb2.deleteCharAt(i);
                }
            }

Deswegen die Frage.
(Also der Code funktioniert bei mir auch nicht, hehe.)
 
Zuletzt bearbeitet von einem Moderator:
Anagramme bestehen ja daraus, dass die Position nicht gleich ist.

Walker und Reklaw sind Anagramme - aber die Position der einzelnen Buchstaben ist nicht gleich.

Sprich, das W steht in ersten String an Position 0 und im zweiten an Position 5.

Hinzu kommt, sobald du ein Zeichen aus sb2 löschst, wird der String kürzer. Das heißt, wenn du in s1 an Stelle 5 bist, ist sb2 vielleicht nur noch 2 Zeichen lang, weil du bereits 4 zeichen gelöscht hast. Und dann versucht alleine der Zugriff auf die Position 5 eine Exception.
 
Anagramme bestehen ja daraus, dass die Position nicht gleich ist.

Walker und Reklaw sind Anagramme - aber die Position der einzelnen Buchstaben ist nicht gleich.

Sprich, das W steht in ersten String an Position 0 und im zweiten an Position 5.

Hinzu kommt, sobald du ein Zeichen aus sb2 löschst, wird der String kürzer. Das heißt, wenn du in s1 an Stelle 5 bist, ist sb2 vielleicht nur noch 2 Zeichen lang, weil du bereits 4 zeichen gelöscht hast. Und dann versucht alleine der Zugriff auf die Position 5 eine Exception.
Ah, jetzt hab ich es verstanden. Danke!😄
 
Wobei genau genommen bei einem Anagramm das neue Wort nicht mal eine Spiegelung des akten Wortes sein muss (wie hier bei walker und reklaw) (sowas hat auch seinen speziellen namen).
das neue Wort muss nur srichwörtlich haargenau aus den selben Buchstaben wie das alte Wort bestehen, nur neu angeordnet
 

Zurück
Oben