Satz aufteilen und die Wörter zählen (HashMap)

Z

Zakon

Mitglied
Hallo,
ich programmiere gerade ein Porgramm was einen beliebigen Satz in die verschiednen Wörter aufteilen soll und diese Zählen soll.
Da ich im Moment auch das Arbeiten mit Methoden übe habe ich das natürlich hier auch gemacht.
Follgendes Problem. Ich bekomme bei Zeile 9 eine "actual and formal argument lists differ in length" Meldung.
Ich weiß was diese Aussat nur bin ich seit zwei Studnen am versuchen das zu behebne und bin langsam am Ende. 😅
Danke schonmal für eure Antworten :)


Java:
public class satz {
    public static void main(String[] args) {
        new satz().teilen();
    }

    public void teilen(){
        eingabe();
        String[] liste =split();
        ausgabe();
    }

    public String satz;
    public String zeile;
    public int zaehler;

    //Eingabe Satz
    public String eingabe(){
        System.out.println("Gebe ein Satz ein:");
        Scanner eingabe = new Scanner(System.in);
        satz=eingabe.nextLine();
        return satz;
    }

    //Split Satz
    public String[] split(){
        String[] split = satz.split(" ");
        return split;
    }

    //Liste ertellen und füllen
    public Map map(String[] liste) {
        Map<String, Integer> worte = new HashMap<String, Integer>();
        for (int i = 0; i == liste.length;i++) {
            if (worte.containsKey(liste)) {
                worte.put(split()[i],1);

            } else {
                worte.put(split()[i], i+1);
            }
        }
        return worte;
    }

    //Ausgabe
    public void ausgabe(HashMap worte){
        for(int i =0; i == split().length;i++){
            System.out.println(worte);
        }
    }

}
 
temi

temi

Top Contributor
"actual and formal argument lists differ in length" Meldung
Diese Meldung haben wir doch in deinem letzten Thema schon ausführlich diskutiert. Die Bedeutung ist immer noch die selbe ;)

EDIT: Ah, hab grad kapiert, was "Aussat" bedeuten soll.

Musst du Map<> verwenden oder tut es auch ein Array?

EDIT2: Was machst du da eigentlich? Um die Worte zu zählen reicht doch ein einzelnes String.split() aus. Die Länge des erzeugten Arrays entspricht der Anzahl der Worte.
 
Z

Zakon

Mitglied
Diese Meldung haben wir doch in deinem letzten Thema schon ausführlich diskutiert. Die Bedeutung ist immer noch die selbe ;)

EDIT: Ah, hab grad kapiert, was "Aussat" bedeuten soll.

Musst du Map<> verwenden oder tut es auch ein Array?

EDIT2: Was machst du da eigentlich? Um die Worte zu zählen reicht doch ein einzelnes String.split() aus. Die Länge des erzeugten Arrays entspricht der Anzahl der Worte.
Hi :) Ja ich muss eine Map verwenden da ich die Ausgabe später so z.B. haben möchte.

"Das Auto ist ein Auto"

Ausgabe:
Das = 1
Auto = 2
ist = 1
....

Und ja mir ist klar das ich ihm weider was kompkett falsches gebe was er eigentlich erwartet nur bin ich mir nicht sicher warum weil ich habe nun mal eine Map und kann der ausgabe ja nichts anderes geben 🤔

Danke schonmal euch beiden für die Antworten.
 
temi

temi

Top Contributor
Ja ich muss eine Map verwenden da ich die Ausgabe später so z.B. haben möchte.
Auch für die gewünschte Ausgabe brauchst du keine Map. Das von split() gelieferte Array reicht dazu vollkommen aus.
Java:
String s = "Das Auto ist ein Auto";

String[] arr = s.split(" ");

System.out.println("Der Satz enthält: " + arr.length + " Worte.");

// für die Ausgabe über das Array iterieren

Fordert die Aufgabe die Verwendung von Map? Brauchen würdest du sie nicht.
 
T

thecain

Top Contributor
Wenn er die einzelnen Wörter zählen will, macht die Map doch durchaus Sinn?

Sonst würde ich da gerade was übersehen...
 
kneitzel

kneitzel

Top Contributor
Die Map ist ein einfacher Weg, doppelte Worte zu finden. Er möchte ja nicht nur die Anzahl der Worte haben sondern auch für jedes Wort die genaue Anzahl.

Daher bietet sich die Map durchaus an.
 
temi

temi

Top Contributor
sondern auch für jedes Wort die genaue Anzahl.
Ah, jetzt hat's geschnackelt. ;) Manchmal dauert es etwas.

Dann als Tipp für die Map:

Du gehst Wort für Wort durch das Array und prüfst, ob das Wort bereits in der Map enthalten ist. Falls nein, dann fügst du das Wort mit der Anzahl 1 der Map hinzu. Fall ja, dann erhöhst du nur die Anzahl in der Map. Dazu musst du zunächst die aktuelle Anzahl mittels get() aus der Map heraus holen.
 
Zuletzt bearbeitet:
temi

temi

Top Contributor
Java:
    //Liste erstellen und füllen
    public Map map(String[] liste) { // anstatt Map besser Map<String, Integer> als Rückgabetyp
        Map<String, Integer> worte = new HashMap<String, Integer>();
        for (int i = 0; i == liste.length;i++) { // schau dir mal deine Schleifenbedingung an, sie soll laufen solange i < length ist
            if (worte.containsKey(liste)) { // nicht die ganze Liste, nur ein einzelnes Wort daraus, liste ist ein Array.
               // außerdem: Einfügen möchtest du, wenn das Wort NICHT in der Map enthalten ist!
                worte.put(split()[i],1); // split()??? Der Parameter "liste" enthält doch die Worte
              
            } else {
                worte.put(split()[i], i+1); // du musst die aktuelle Anzahl um 1 erhöhen, also vorher mit get() aus der Map lesen
            }
        }
        return worte;
    }

Die Laufvariable der Schleife wird eigentlich gar nicht benötig, du könntest auch eine foreach-Schleife verwenden:
Java:
for (String wort : liste) {
    // und jetzt kommst du ;)
}
 
Zuletzt bearbeitet:
kneitzel

kneitzel

Top Contributor
Was mir da bei dem Code auffällt: Du rufst immer wieder split() auf. Das ist natürlich nicht ganz so schön, weil Du so immer und immer wieder den ursprünglichen Test umwandelst. Da ist dann ein Pattern besser, dass das Ergebnis nur einmal berechnet und dann immer wieder verwendet.

Das könnte also im einfachsten Fall etwas sein wie: Vor der Schleife wird das Ergebnis in einer lokalen Variable gespeichert und diese dann immer wieder verwendet. Das kann man dann natürlich noch beliebig umändern, d.h. das Speichern kann man z.B. in die split Methode verschieben, die schaut: Wurde das Ergebnis schon einmal berechnet um dann ggf das vorhandene Ergebnis zurück zu geben. Oder man baut das in eine eigene Klasse, in der dann z.B. der Konstruktor das bereits aufbereitet und dann hat man nur noch Zugriffe auf das Ergebnis.
 
Z

Zakon

Mitglied
Erstmal danke für die ganzen Antworten hat mir alles sehr geholfen :)
Ich habe jetzt ein wenig getesttet und rumprobiert unnd bin zu folgendem Code gekommen:
Java:
public class satz {
    public static void main(String[] args) {
        new satz().teilen();
    }

    public void teilen(){
        eingabe();
        String[] liste =split();
        ausgabe(map(liste));
    }

    public String satz;
    public String zeile;
    public int zaehler;

    //Eingabe Satz
    public String eingabe(){
        System.out.println("Gebe ein Satz ein:");
        Scanner eingabe = new Scanner(System.in);
        satz=eingabe.nextLine();
        return satz;
    }

    //Split Satz
    public String[] split(){
        String[] split = satz.split(" ");
        return split;
    }

    //Liste ertellen und füllen
    int i;
    public Map<String, Integer>map(String[] liste) {
        Map<String, Integer> worte = new HashMap<String, Integer>();
        for (String wort : liste) {
            if (!worte.containsKey(liste)) {
                worte.put(liste[i],i++);

            } else {
                worte.put(liste[i], 1);
            }
        }
        return worte;
    }

    //Ausgabe
    public void ausgabe(Map<String, Integer> worte){
        System.out.println(worte);

    }

}

Problem ist nur jetzt das ich bei dem Beispiel Satz: "Hallo ich bin ich" die Ausgabe: "Hallo=0, bin=2, ich=3" bekomme.
Ich denke ich bin kurz davor deswegen wäre ein Tipp nochmal ganz Hilfreich: :)
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Lösch die Variable "i" und ersetz alle Nutzungen davon durch etwas sinnvolles ;)

@temi hat deinen Code doch schon recht gut kommentiert, was man dort ändern muss – du musst es eigentlich nur Schritt für Schritt durchgehen :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Erste Schritte Vokale im Satz ersetzen Java Basics - Anfänger-Themen 20
O Großbuchstaben im Satz zählen Java Basics - Anfänger-Themen 6
D Vokale auslesen in Satz Java Basics - Anfänger-Themen 7
L Wertebereich if-Satz angeben (z.B: Benzinverbrauch 51 <=75<) Java Basics - Anfänger-Themen 1
U Primfaktorzerlegung m. kleinem Fermat-Satz Java Basics - Anfänger-Themen 4
C Stringeingabe: kein Satz wegen Leerzeichen möglich Java Basics - Anfänger-Themen 3
T Erste Schritte Eingelesenen Satz - Wörter und Leerzeichen getrennt in 2x Array's Java Basics - Anfänger-Themen 7
D Satz des Pythagoras Java Basics - Anfänger-Themen 30
H Satz abkürzen Java Basics - Anfänger-Themen 13
S Satz des Pythagoras Java Basics - Anfänger-Themen 9
S ein Satz aus einer Datei in eine andere Datei Speichern? Java Basics - Anfänger-Themen 5
B Satz Zufallszahlen ohne Wiederholung Java Basics - Anfänger-Themen 14
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
G String mit mehreren Attributen aufteilen Java Basics - Anfänger-Themen 6
UnknownInnocent Variablen ArrayList aufteilen Java Basics - Anfänger-Themen 2
T Zahlen aufteilen Java Basics - Anfänger-Themen 2
R Frage: Aufteilen der GUI Java Basics - Anfänger-Themen 3
Z Threads Executor Framework - Aufgabe auf n Threads aufteilen Java Basics - Anfänger-Themen 10
F Methoden Java String aufteilen Java Basics - Anfänger-Themen 17
M Aufteilen in Classen Java Basics - Anfänger-Themen 5
J Hochzahlen aufteilen Java Basics - Anfänger-Themen 3
N Input/Output .txt-Datei einlesen, aufteilen und seperat abspeichern Java Basics - Anfänger-Themen 3
D String in Integer Array aufteilen Java Basics - Anfänger-Themen 12
K arraylist zufällig aufteilen Java Basics - Anfänger-Themen 5
L Array aufteilen Java Basics - Anfänger-Themen 3
L Matrizen aufteilen Java Basics - Anfänger-Themen 3
L Array aufteilen Java Basics - Anfänger-Themen 13
D Java Download in mehrere Parts aufteilen Java Basics - Anfänger-Themen 2
D 100.0% gleichmäßig aufteilen, so dass Summe 100.0% sind, nicht 99,9% oder 100,1% Java Basics - Anfänger-Themen 3
H String/StringBuffer nach zeilen aufteilen Java Basics - Anfänger-Themen 2
M Programm in zwei Klassen aufteilen? Java Basics - Anfänger-Themen 8
M Betrag in Münzen aufteilen Java Basics - Anfänger-Themen 15
M Sekunden aufteilen Java Basics - Anfänger-Themen 5
S Nach Namen sortieren und diese in 3 Gruppen aufteilen Java Basics - Anfänger-Themen 16
K String aufteilen Java Basics - Anfänger-Themen 11
L In metoden/classen aufteilen (weniger im main) Java Basics - Anfänger-Themen 17
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
UnknownInnocent Datentypen Verdrehte Wörter wieder herstellen Java Basics - Anfänger-Themen 21
UnknownInnocent Variablen Wörter erschließen Java Basics - Anfänger-Themen 7
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
Orkanson Methoden String in Wörter zerlegen und Endungen der Wörter überprüfen. Java Basics - Anfänger-Themen 4
JavaNewbie2.0 Tausende Wörter in Arrays automatisch einfügen Java Basics - Anfänger-Themen 10
B Collections Java Wörter in String zählen und geordnet ausgeben Java Basics - Anfänger-Themen 10
E Datei einlesen und bestimmte Wörter ausgeben Java Basics - Anfänger-Themen 2
DestinatioN Problem beim splitten eines Satzes in Wörter und die Wörter in Buchstaben Java Basics - Anfänger-Themen 2
A Wie am effizientesten bzw. schnellsten Namen/Wörter sortieren? Java Basics - Anfänger-Themen 1
I String teilen und zwei Wörter generieren Java Basics - Anfänger-Themen 1
A Text teilen und Wörter zählen Java Basics - Anfänger-Themen 7
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
T Eingegebene Wörter ausgeben? Java Basics - Anfänger-Themen 3
T Wörter mit @ als Zeichen finden Java Basics - Anfänger-Themen 13
J Alle Wörter der Länge n mit 0 und 1 Java Basics - Anfänger-Themen 17
G wörter speichern Java Basics - Anfänger-Themen 12
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
C Wörter aus einer txt datei lesen Java Basics - Anfänger-Themen 19
C String Arrays - häufigste Wörter Java Basics - Anfänger-Themen 10
B Input/Output Wörter zählen & sortieren Java Basics - Anfänger-Themen 9
S Buchstaben/Wörter im String zählen Java Basics - Anfänger-Themen 6
K Anzahl Wörter in Zeile Java Basics - Anfänger-Themen 24
F wörter trennen und in txt-file schreiben Java Basics - Anfänger-Themen 5
J Von einem String einzelne Wörter speichern Java Basics - Anfänger-Themen 6
R Wörter-KarteiSystem/Vokabel Trainer Source Fragen Java Basics - Anfänger-Themen 9
A Wörter umgekehrten Reihenfolge ausgeben Java Basics - Anfänger-Themen 3
J Wörter in einem string zählen und die anzahl zurückgeben Java Basics - Anfänger-Themen 4
P Zwei Wörter vergleichen Java Basics - Anfänger-Themen 11
S Wörter zählen Java Basics - Anfänger-Themen 19
N Wörter zählen im String Java Basics - Anfänger-Themen 3
Screen Wie lese ich Wörter ein? Java Basics - Anfänger-Themen 6
G Wörter Zählen Java Basics - Anfänger-Themen 11
J Wörter im String zählen Java Basics - Anfänger-Themen 4
P wörter im string zählen Java Basics - Anfänger-Themen 9
G Häufigkeit der Wörter einer Webseite zählen Java Basics - Anfänger-Themen 7
C Wörter suchen Java Basics - Anfänger-Themen 4
M Anzahl von Wörter in einer eingelesenen Datei Java Basics - Anfänger-Themen 10
S Regex, Wörter ersetzen Java Basics - Anfänger-Themen 2
S Welche Bedeutung haben diese Wörter? Java Basics - Anfänger-Themen 2
S Zeilen, Zeichen, Wörter Java Basics - Anfänger-Themen 3
K Wörter zählen auf Internetseiten... die zweite Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben