/ / Word Count-Programm mit HashMaps - Java, Algorithmus, Hashmap, Zählen

Word Count Programm mit HashMaps - Java, Algorithmus, Hashmap, Zählen

import java.io.*;
import java.util.*;

public class ListSetMap2
{
public static void main(String[] args)
{
Map<String, Integer> my_collection = new HashMap<String, Integer>();
Scanner keyboard = new Scanner(System.in);

System.out.println("Enter a file name");
String filenameString = keyboard.nextLine();
File filename = new File(filenameString);
int word_position = 1;
int word_num = 1;

try
{
Scanner data_store = new Scanner(filename);
System.out.println("Opening " + filenameString);
while(data_store.hasNext())
{
String word = data_store.next();
if(word.length() > 5)
{
if(my_collection.containsKey(word))
{
my_collection.get(my_collection.containsKey(word));
Integer p = (Integer) my_collection.get(word_num++);
my_collection.put(word, p);
}
else
{
Integer i = (Integer) my_collection.get(word_num);
my_collection.put(word, i);
}
}
}
}
catch (FileNotFoundException e)
{
System.out.println("Nope!");
}
}
}

Ich versuche ein Programm zu schreiben, wo es istGibt eine Datei ein / scannt sie, protokolliert die Wörter in einer HashMap-Sammlung und zählt "s", wie oft das Wort im Dokument vorkommt, wobei nur Wörter mit mehr als 5 Zeichen gezählt werden.

Es ist ein bisschen Chaos in der Mitte, aber ich bin esEs werden Probleme beim Zählen der Häufigkeit des Auftretens dieses Worts sowie bei der individuellen Zählung für jedes Wort behandelt. Ich bin mir sicher, dass es hier eine einfache Lösung gibt und ich es einfach vermisse. Bitte helfen Sie!

Antworten:

3 für die Antwort № 1

Ihre Logik beim Einstellen der Worthäufigkeit ist falsch. Hier ist ein einfacher Ansatz, der für Sie funktionieren sollte:

    // if the word is already present in the hashmap
if (my_collection.containsKey(word)) {
// just increment the current frequency of the word
// this overrides the existing frequency
my_collection.put(word, my_collection.get(word) + 1);
} else {
// since the word is not there just put it with a frequency 1
my_collection.put(word, 1);
}

0 für die Antwort № 2

(Nur Hinweise geben, da dies Hausaufgaben zu sein scheint.) my_collection ist (richtig) a HashMap diese Karten String Schlüssel zu Integer Werte; In Ihrer Situation sollte ein Schlüssel ein Wort sein, und der entsprechende Wert soll die Häufigkeit sein, mit der Sie dieses Wort (Häufigkeit) gesehen haben. Bei jedem Anruf my_collection.get(x), der Parameter x muss ein sein String, nämlich das Wort, dessen Häufigkeit Sie wissen möchten (leider HashMap Erzwingt das nicht.) Jedes Mal, wenn Sie anrufen my_collection.put(x, y), x muss ein sein String, und y muss ein sein Integer oder int, nämlich die Häufigkeit für dieses Wort.

Denke darüber nach, was du denkstVerwenden Sie als Parameter und die Reihenfolge, in der Sie die Aufrufe ausführen müssen und wie Sie die Werte bearbeiten müssen. Zum Beispiel, wenn Sie das bereits bestimmt haben my_collection enthält das Wort nicht, macht es Sinn zu fragen my_collection für die Häufigkeit des Wortes? Wenn es das Wort enthält, wie müssen Sie die Frequenz ändern, bevor Sie den neuen Wert setzen my_collection?

(Bitte wählen Sie auch einen aussagekräftigeren Namen für my_collection, z.B. frequencies.)


0 für die Antwort № 3

Versuche diesen Weg -

while(data_store.hasNext()) {

String word = data_store.next();

if(word.length() > 5){

if(my_collection.get(word)==null) my_collection.put(1);
else{
my_collection.put(my_collection.get(word)+1);
}

}
}