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.
-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);
}
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);
}