Wörteranzahl im Array zählen

Taso44

Aktives Mitglied
Hallo Zusammen,
ich bräuchte bräuchte Hilfe bei einer Methode , die die Anzahl von Wörtern in einem Array zählt.
Die Stelle wo ich nicht weiter komme ist, dass die Methode zwar richtig zählt, aber wenn das gleiche Wort nochmal drankommt fängt er von vorne an und es kommt am Ende dann wieder 1 dabei raus.
Ich muss (glaube ich) also eine Lösung finden, in der ich schon verarbeitete Wörter "entferne" oder halt dafür sorge, dass diese eben nicht nochmal verarbeitet werden.
Ich schätze ich brauche ein neues Array dafür, aber ich glaube das wäre zu umständliche, auch an eine ArrayList habe ich gedacht, aber die Aufgabe basiert hier halt auf ein Array. Ich weiß nicht, ob ich eine Arraylist nutzen darf. Die einfachste Lösung schien mir die im Code zu sein.
Vlt könnt ihr mir ja weiter helfen🙂

Mein Code
Java:
public class WörterzählenHashmap3 {

    public static void main(String[] args) {

        String[] wörter = { "ist", "klar", "hier", "hier" };
        HashMap<String, Integer> erg = new HashMap<>();
        int count = 0;

        for (int i = 0; i < wörter.length; i++) {
            String wort = wörter[i];
            for (int e = i; e < wörter.length; e++) {
                if (wörter[i].equals(wörter[e])) {
                    count++;
                }
               
            }

            erg.put(wort, count);

            count = 0;
           
            //Hier versuche ich die Wörter bei jedem  Durchlauf zu "löschen"
            if(wörter[i].equals(wort)) {
                wörter[i]="";
            }
        }
        System.out.println(erg);

    }
}

Danke sehr
 
Java:
public static long zaehleWoerterIn(String[] array) {
  return java.util.Arrays.stream(array).distinct().count();
}
 
Java:
hashmap<string,Integer> map

foreach(wort in deinerliste)
{
    if(existiert der key in der map)
    {
        map[wort] += 1
    }else{
        map.Add(wort,1)
    }
}
wenn du es mit einer hashmap machst kannst du ein eimer system bauen

du entscheidest basierend auf den namen der eimer ob du es hoch zählst oder nicht
der "name" des eimers ist das wort

dh wenn du "ist" findest und noch keinen eimer mit dem namen hast , dann legst du einen neuen eimer an und legst da das wort "ist" rein dh ein eimer hat mindestens 1 wort drinnen

falls dann noch mal ein "ist" vorkommt hast du schon den eimer also erhöhst du den wert im eimer um 1

am schluss kannst du über alle eimer gehen und schauen was drin ist, bei dem beispiel würde ich im eimer "ist" die zahl 2 finden
 
naja es hat das getan was auch da steht 😀

1. nimm das array
2. nimm alle einzigartigen werte
3. zähle die einzigartigen werte

und du hast auch 3 einzigartige werte in deinem array
 
Das Problem ist wie so oft doch relativ einfach lösbar, wenn man sich einfach einmal überlegt, wie man denn vorgehen muss.

Man geht das Array der Wörter durch.
- wenn man das Wort noch nicht gezählt hat, dann zählt man ab dem aktuellen Vorkommen alle Worte.

Die Lösung ist also relativ einfach. Beim betrachten dieser Logik sollte man aber erst noch einmal genau hinschauen: "wenn man das Wort" ... das Wort ist also das aktuelle Wort ... das braucht man also.

Aber damit hat man das schon direkt unterteilt. Was noch fehlt: Was braucht die Prüfung, ob ein Wort schon gezählt wurde? Da hat man noch nicht die Parameter. Wie kannst Du das denn feststellen? Was für eine Bedingung muss erfüllt werden, dass ein Wort an index i bereits gezählt wurde?

Der Code wird dann etwas werden wie:
Java:
public void countWords(String[] words) {
    for (int index = 0; index < words.length; index++) {
        String currentWord = words[index];
        if (!wordsAlreadyCounted(??????)) {
            countWord(currentWord, words, index);
        }
    }
}


Das hat den Vorteil, dass man kurze, gute lesbare Methoden bekommt. Die sind dann auch jede für sich einfach schreibbar. Man sollte diesen Ansatz immer wählen! Also immer erst genau erfassen, was der Algorithmus eigentlich machen sollte. Dies macht man in einer Sprache, die man sehr gut beherrscht. Dann klappt das fast von ganz alleine mit dem Programmieren!
 

Zurück
Oben