Kann mir jemand dieses Programm erklären?

Alpinwhite

Aktives Mitglied
Wir sind heute ein Programm durchgegangen, dass ich nicht verstehe.
Die Aufgabe ist folgende:

Komplettieren Sie das Java-Programm „Anagram“, das zwei Wörter vom Benutzer (Kommandozeile) einliest und in weiterer Folge überprüft, ob es sich bei dem zweiten Wort um ein Anagramm des ersten Wortes handelt.
Definition „Anagramm“
 Das zweite Wort ist ein Anagramm des ersten Wortes, falls es durch Permutation aus dem ersten Wort erzeugt werden kann.
 Unterscheide dazu „Palindrome“ (Wörter die von vorne und hinten gelesen gleich sind…)
Bsp: 1. Wort 2. Wort Anagramme?
 item time Ja
 acres caress Nein
 scare cares Ja
 react crater Nein
 anna anna Ja (zusätzlich gilt die Eigenschaft „Palindrom“)
Zur Implementierung des Algorithmus (Vergleich der beiden Zeichenketten) verwenden Sie bitte „StringBuilder“ oder „StringBuffer“-Objekte! Lösungshinweis (ein möglicher Weg… 1. Prüfe auf gleiche Länge (falls ungleich, kein Anagramm) 2. Erzeuge eine modifizierbare Kopie des 2. Strings/Worts (=StringBuffer) 3. „Streiche“ im 2. String vorhandene Buchstaben des 1. Strings aus 4. Überprüfe ob im 2. String alle Buchstaben durchgestrichen sind…; ein Anagramm liegt vor, wenn genau dass der Fall ist.

Java:
public class Anagram {
    public static void main(String[] args) {
        String s1, s2;
        boolean isAnagram;

        System.out.print("Erstes Wort?: ");
        s1 = Input.readString();
        System.out.print("Zweites Wort?: ");
        s2 = Input.readString();

        // Prüfe auf gleiche Länge (falls ungleich, kein Anagramm)
        if (s1.length() == s2.length()) {

            // Erzeuge eine modifizierbare Kopie von s2
            StringBuffer sb2 = new StringBuffer(s2);
           
            // Streiche in s2 vorhandene Buchstaben in s1 aus
            for (int i=0; i<s1.length(); i++) {
                int pos = sb2.toString().indexOf(s1.charAt(i));
                if (pos != -1) {
                    sb2.setCharAt(pos, (char)0);
                }
            }
           
            // Überprüfe ob in sb2 alle Buchstaben durchgestrichen sind
            int i = 0;
            while (i<sb2.length() && sb2.charAt(i) == (char)0) {
                i++;
            }
            isAnagram = (i==sb2.length());
        }
        else
            isAnagram = false;

        System.out.print("Die beiden Wörter sind ");
        if (!isAnagram){
            System.out.print("KEINE ");
        }
        System.out.print("Anagramme.");
    }
}

-Was passiert in der ersten for-Schleife? Warum"streicht" man die Buchstaben raus?
-Warum kann "pos" den Wert -1 annehmen?
if (pos != -1) {
sb2.setCharAt(pos, (char)0);
}
 
- pos kann dann -1 sein (wie man auch in der JavaDoc nachlesen kann), wenn der gesuchte Character nicht gefunden wurde
- Warum man die Buchstaben streicht? Um zu schauen, ob das erste Wort aus den selben Buchstaben wie das 2. Wort besteht. Bei time und item kannst du Schritt für Schritt jeden Buchstaben aus time in item streichen. Am Ende, wenn alle Buchstaben verstrichen sind (in beiden Worten) weißt du, dass sie gleich sein müssen.
 

Neue Themen


Zurück
Oben