Methode Parametisieren

Logs

Mitglied
Moin,
Ich habe eine Frage. Unsere Aufgabenstellung ist folgende.
## Tripple in Zeichenketten finden
*
* Entwickeln Sie nun bitte eine Methode noMultiples(), die prüft, ob in
* einer Zeichenkette niemals drei (oder mehr) gleiche Zeichen aufeinander
* folgen.
*
* Verallgemeinern Sie noMultiples() nun so,
* dass die Anzahl der zu wiederholenden Zeichen parameterisiert ist.

Und wir sollen einen allgemeinen Code schreiben für für noMultiples Methode mit der Angabe für die maximalen Wiederholungen und diese dann nochmal, für den Fall, dass diese nicht parametisiert sind. Dann soll die noMultiples Methode wiederholt werden ohne maxRepeats. Kann mir jemand erklären, wie genau ich das mache bzw. wo der Fehler hier liegt?
ps. bin noch Anfänger, seid gnädig





Mein Code wäre

class Main {
public static boolean noMultiples(int maxRepeats, String s) {
if ( s == null || s.isEmpty()) {
return true;
}
char currentChar = s.charAt(0);
int count = 1;
for (int i = 1; i < s.length(); i++) {
char nextChar = s.charAt(i);
if (nextChar == currentChar) {
count++;
if (count > maxRepeats) {
return false;
} else {
currentChar = nextChar;
count = 1;
}
}

}
return true;

}
public static boolean noMultiples(String s) {
return noMultiples(2, s);
}

public static void main(String[] args) {
boolean result = noMultiples("Hello World");
System.out.println(result); // => true
System.out.println(noMultiples("faaantastic")); // => false
System.out.println(noMultiples(2, "Hello World")); // => false
}
}
 

KonradN

Super-Moderator
Mitarbeiter
Bitte code immer in Code-Tags packen!

Und dein else ist beim falschen if. Dadurch bleibt currentChar immer auf dem ersten Zeichen. Und Du setzt den Counter immer zurück auf 1 wenn das erste Zeichen gezählt wird.

Daher: Immer auf die richtige Einrückung achten - dann sieht man sowas auf den ersten Blick:
Java:
class Main {
    public static boolean noMultiples(int maxRepeats, String s) {
        if ( s == null || s.isEmpty()) {
            return true;
        }

        char currentChar = s.charAt(0);
        int count = 1;
        for (int i = 1; i < s.length(); i++) {
            char nextChar = s.charAt(i);
            if (nextChar == currentChar) {
                count++;
                if (count > maxRepeats) {
                    return false;
                } else {
                    currentChar = nextChar;
                    count = 1;
                }
            }

        }
        return true;

    }
    public static boolean noMultiples(String s) {
        return noMultiples(2, s);
    }

    public static void main(String[] args) {
        boolean result = noMultiples("Hello World");
        System.out.println(result); // => true
        System.out.println(noMultiples("faaantastic")); // => false
        System.out.println(noMultiples(2, "Hello World")); // => false
    }
}

Ansonsten ist noch die Frage: Wenn du einen leeren String gibst: Gibt es da mehrere gleiche Zeichen? Da würde ich kein true zurück geben sondern ein false.
 

Neue Themen


Oben