Konsonantenzähler

SoftBottle

Mitglied
Hallo zusammen,

bin noch ziemlich neu in Java und komme gerade bei einer Aufgabe nicht weiter.
Ziel ist es die längste Konsonantenfolge eines Wortes zu ermitteln.
[CODE lang="java" title="Konsonantenzähler"] static int countKons(String a) {
String cons = "bcdfghjklmnpqrstvwxz";
int count = 0;

int wordLength = a.length();
char[] letters = new char[wordLength];

// Wandelt Wort in CharArray in Kleinbuchstaben um
for (int i = 0; i < wordLength; i++) {
letters = Character.toLowerCase(a.charAt(i));
}

for(int j = 0; j < letters.length; j++){
char let = letters[j];

for(int k = 0; k < cons.length(); k++) {
char con = cons.charAt(k);
if(let == con) count++;
else count = 0;

}
}

return count;[/CODE]

Kurze Erklärung: Die Methode bekommt ein Wort als String und wandelt es zunächst in ein char-Array (letters) um. (Ließe sich sicher auch vereinfachen, aber ich bin ja noch am üben :))
Gegeben sind im String cons alle Konsonanten. Mit der ersten For-Schleife durchlaufe ich dann das Array letters und mit der 2. Schleife den Konsonanten-String.
Stimmen die Zeichen überein, dann wird der counter um 1 erhöht.


Das Problem: Lasse ich die else-Anweisung in der 2. For-Schleife weg, erhalte ich die Gesamtanzahl der Konsonanten eines Wortes.
Als Beispiel das Wort "Test". Beinhaltet 3 Konsonanten.
Da ich aber die längste Konsonantenfolge erhalten möchte ("st") also 2, funktioniert das Ganze so leider nicht.
Mit der else-Anweisung bekomme ich dann 0 heraus, weil die 2. For-Schleife ja weiter den Konsonantenstring durchläuft und dann den Counter zurücksetzt.

Könnte mir da jemand weiterhelfen? Wenn mein Lösungsansatz so überhaupt keinen Sinn macht, dann bitte einfach sagen. In dem Falle werde ich mir was Neues ausdenken. Würde aber - wenns denn möglich ist - eig. gern bei diesem Ansatz bleiben und hab das Gefühl das ich einfach nur zu doof bin hier die If und else Anweisungen anzupassen.
 

LimDul

Top Contributor
Du kommst mit einer Variablen nicht mehr weiter. count an sich ist erst mal richtig, das zählt die Länge der aktuell betrachteten Konsonanten-Folge.

Problem: Du willst am Ende ja die längste Konsonantenfolge habe und nicht die zuletzt betrachtete.
Lösung: eine weitere Variable laengsteKonsonatenFolge. Ist anfangs 0.

Immer wenn du auf einen nicht-Konsonanten triffst, machst du zwei Dinge:
a) ÜBerprüfen, ob count größer als die laengsteKonsonatenFolge ist => Wenn ja laengsteKonsonatenFolge auf count setzen
b) count auf 0 zurücksetzen (machst du ja schon)

Und am Ende vor dem return, machst du die Überprüfung aus a) auch noch mal und gibst dann laengsteKonsonatenFolge zurueck.
 

SoftBottle

Mitglied
Vielen dank LimDul!
Das ging schnell. :D

Hier nochmal der jetzt funktionierende Code:

Java:
static int countKons(String a) {
        String cons = "bcdfghjklmnpqrstvwxz";
        int count = 0;
        int laenge = 0;
        
        int wordLength = a.length();
        char[] letters = new char[wordLength];

        // Wandelt Wort in CharArray in Kleinbuchstaben um
        for (int i = 0; i < wordLength; i++) {
            letters[i] = Character.toLowerCase(a.charAt(i));
        }
        
        for(int j = 0; j < letters.length; j++){
            char let = letters[j];
            
            for(int k = 0; k < cons.length(); k++) {
                char con = cons.charAt(k);
                if(let == con) count++;
                else {
                    if(count > laenge) {
                        laenge = count;
                        count = 0;
                    }
                }   
            }
        }
        if(count > laenge) {
            laenge = count;
        }
        return laenge;
    }
 

Neue Themen


Oben