Anagramm mit Strings und Methode

Moin,
habe eine Aufgabe bekommen die lautet wie folgt:
Aufgabe 4: Anagramme (4 Punkte) Ein Anagramm einer Zeichenkette ist eine Zeichenkette mit exakt gleich vielen, identischen Zeichen in gegebenenfalls anderer Reihenfolge. Beispiel: betrug und geburt sind Anagramme voneinander. Außerdem sollen Leerzeichen ignoriert werden, so dass auch tom marvolo riddle und i am lord voldemort Anagramme voneinander sind. Klein-/Großschreibung soll hingegen berücksichtigt werden. Schreiben Sie eine Methode public static boolean anagramm(String s1, String s2), die prüft, ob die beiden Argumente Anagramme voneinander sind. Testen Sie in der main! Gehen Sie dabei wie folgt vor (und nicht anders, etwa Sortieren mit eingebauten Methoden):  Entfernen Sie zunächst alle Leerzeichen (Aufgabe 3).  Entfernen Sie nacheinander jedes Zeichen in s1 aus s2, falls s1 und s2 dieselbe Länge haben.

ich habe das Programm soweit bekommen, dass es Groß- und Kleinschreibung ignoriert leider hänge ich bei dem Punkt mit dem Leerzeichen löschen und das hat mir den Code auch total zerschossen...
Java:
public class Palindrom {
    static int counter;
    public static void main(String[] args) {
System.out.println(anagramm("tommarvoloriddle", "iamlordvoldemort"));
public static boolean anagramm( String s1, String s2) {
    String a = s1.replaceAll(" ", "");
    String b = s2.replaceAll(" ","");
    a=s1.toLowerCase().trim();
    b=s2.toLowerCase().trim();
    if( a.length() == b.length()) {
    for(int i = 0; i < a.length(); i++) {
        for( int j = 0; j < b.length(); j++) { 
        if(a.charAt(i) == b.charAt(j)) {
        counter++;
        }
        }
    }
    
    }
    if( counter == a.length()) {
        return true;
    }
    else {
        return false;
    }
    }
P.s deswegen sieht der code jetzt auch ein bisschen komisch aus, da ich sehr viel rumprobiert habe.
 
Zuletzt bearbeitet von einem Moderator:
dass es Groß- und Kleinschreibung ignoriert
Bist Du sicher, dass Du das willst?
Klein-/Großschreibung soll hingegen berücksichtigt werden.
Entfernen Sie zunächst alle Leerzeichen (Aufgabe 3)
Das musst Du also schon eine Aufgabe zuvor gemacht haben, oder?

Wenn Du das mit replaceAll machen willst, hast Du es im Code oben schon richtig gemacht (man könnte statt " " auch "\\s" verwenden, um sämtliche Whitespace-Character zu ersetzen). Was natürlich keinen Sinn gibt, ist erst der Variablen a den String s1 ohne Leerzeichen zuzuweisen und anschließend den Wert der Variablen a mit dem String s1 in Kleinbuchstaben zu überschreiben.
 
Das musst Du also schon eine Aufgabe zuvor gemacht haben, oder?
ja habe ich und zwar so: return resultat = resultat + s.replace( "c", "");
Was natürlich keinen Sinn gibt, ist erst der Variablen a den String s1 ohne Leerzeichen zuzuweisen und anschließend den Wert der Variablen a mit dem String s1 in Kleinbuchstaben zu überschreiben.
Ja ich weiß... das war nur zum ausprobieren aber jetzt habe ich total den überlblick verloren
 
ich glaube so sah mein code davor aus:
Java:
public static boolean anagramm( String s1, String s2) {
    //String a = s1.replaceAll(" ", "");
    //String b = s2.replaceAll(" ","");
    s1.toLowerCase().trim();
    s2.toLowerCase().trim();
    if( s1.length() == s2.length()) {
    for(int i = 0; i < s1.length(); i++) {
        for( int j = 0; j < s2.length(); j++) { 
        if(a.charAt(i) == s2.charAt(j)) {
        counter++;
        }
        }
    }
    
    }
    if( counter == s1.length()) {
        return true;
    }
    else {
        return false;
    }
    }
das auskomemntierte war nicht da
 
Zuletzt bearbeitet von einem Moderator:
Also es ist doch schon einiges vorgegeben:
Gehen Sie dabei wie folgt vor (und nicht anders, etwa Sortieren mit eingebauten Methoden):
- Entfernen Sie zunächst alle Leerzeichen (Aufgabe 3).
- Entfernen Sie nacheinander jedes Zeichen in s1 aus s2, falls s1 und s2 dieselbe Länge haben.
Also das mit den Leerzeichen hast Du schon einmal hinbekommen. Kannst du den zweiten Punkt etwas ausführlicher umschreiben?

Und ich sehe bei Dir kein Entfernen sondern nur irgendwas mit zählen - also würde ich den Teil deines Codes ggf. komplett verwerfen und mir erst einmal überlegen, was man denn machen kann um das mit dem Anagramm über Entfernen von Zeichen zu ermitteln.
 
Wenn Du Code postest, dann bitte in Code-Tags (die drei Punkte neben dem Smiley, dann auf Code, dort Java einstellen, Code inkl. Einrückungen in das Textfeld kopieren).

Hier erstmal der relevante Code nochmal formatiert. Die Rückgabe habe ich schon mal abgekürzt - Sinn ergibt sie aber keinen, denn warum sollte counter so lang wie s1 werden?

Java:
public static boolean anagramm( String s1, String s2) {
    String a = s1.replaceAll(" ", "");
    String b = s2.replaceAll(" ","");

    if( a.length() == b.length()) {
        for(int i = 0; i < a.length(); i++) {
            for( int j = 0; j < b.length(); j++) {
                if(a.charAt(i) == b.charAt(j)) {
                    counter++;
                }
            }
        }
    }
    return counter == s1.length();
}
EDIT: und halte Dich an das, was @JustNobody Dir vorgeschlagen hat :)
 
Das ganze war so gedacht: Die Anagramme müssen ja gleich lang sein. Deswegen habe ich einen counter eingerichtet der solange hochzählt bis es der String länge entspricht und wenn die Strings noch die gleichen Chars enthalten soll true ausgegeben werde (wegen boolean)
 
aaaaab bbbbba sind gleich lang und enthalten die gleichen Zeichen, nämlich a und b, sind aber keine Anagramme.
 
Habe es hinbekommen vielen vielen dank!!! hab den ganzen schrott einfach rausgeschmissen :D
Java:
public static boolean anagramm( String s1, String s2) {
    s1 = s1.replaceAll(" ", "");
    s2 = s2.replaceAll(" ","");
    s1.toLowerCase().trim();
    s2.toLowerCase().trim();
    if( s1.length() == s2.length()) {
    for(int i = 0; i < s1.length(); i++) {
        for( int j = 0; j < s2.length(); j++) {
        if(s1.charAt(i) == s2.charAt(j)) {
        return true;
        }
        }
    }
    }
    return false;
    }
 
Java:
    s1.toLowerCase().trim();
    s2.toLowerCase().trim();
bewirkt gar nichts.

Deine Methode liefert jetzt true, sobald ein beliebiges Zeichen aus s1 in s2 vorkommt.
 
Also dazu zwei Punkte:
a) Der Lösungsweg ist vorgegeben. Eigene Lösungswege sind daher nicht zielführend.
b) Deine Idee dürfte nicht funktionieren. Denn wenn ich es richtig sehe und der erste String "ab" ist, dann zählt er bei "aa" bis 2, was der Länge des strings entspricht. Und bei "aab" und "aab" zählt er bis 5 was nicht der Länge entspricht ....
 
Also müsste ich erstmal alle leerzeichen entfernen das habe ich verstanden. Aber wie ist das gemeint, mit dem es sollen nach und nach alle zeichen aus s1&s2 entfernt werden.
 
und soweit ich es gelernt habe (bin noch blutiger Anfänger) kann ich chars mit .replace entfernen oder liege ich da falsch?
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben