2016-04-24 9 views
0

Hey alle, ich bin neu in Java und ich mache eine Bonus-Aufgabe für meine Einführung in Java-Klasse und ich fragte mich, ob jemand mir helfen könnte für die Bonus-Fragen: Ich brauche nur einen Start Punkt! Danke für jede Hilfe!Token Anzahl Token Länge

Dies ist die ursprünglichen Anforderungen für die Zuweisung:

1) ein Konstruktor, der ein einziges Argument, ein String für den Namen der Eingabedatei akzeptiert zu verarbeiten. FERTIG 2) Eine Funktion namens processFile(), die keine Argumente akzeptiert und eine IOException auslöst. Diese Funktion muss den Inhalt der Eingabedatei lesen und zählen, wie oft jedes Token (Wort) in der Datei vorhanden ist. Eine Mitgliedsvariable HashMap ist eine gute Klasse, die dafür verwendet wird. 3) Eine getFileName() - Funktion, keine Argumente, gibt einen String zurück, der den Namen der Eingabedatei enthält. 4) Eine getTokenCount() - Funktion, keine Argumente, gibt ein int zurück, das die Gesamtzahl der Token (Wörter) in der Eingabedatei angibt. 5) Eine getTokenCount() - Funktion, die ein String-Argument akzeptiert und angibt, wie oft dieses Token (Wort) in der Eingabedatei erscheint. 6) Eine getTokensHavingCount() -Funktion, die ein int-Argument (count) akzeptiert und eine ArrayList von Strings zurückgibt, wobei diese Strings die Token sind, die in der Eingabedatei exakt "gezählt" werden. 7) Eine getTokensHavingLength() - Funktion, die ein int-Argument (die Länge) akzeptiert und eine ArrayListof-Zeichenkette zurückgibt, wobei diese Zeichenketten die Token in der Eingabedatei sind, die genau diese Länge haben. 8) Eine getAverageOfCounts() -Funktion, keine Argumente, gibt den Durchschnitt der Tokenzahlen zurück.

Da dies der Code, den ich bisher habe,

import java.io.*; 

public class Assignment4 { 
// Your member variables go here 
    private String filename; 
    private int wordcount; // ? 
    private Map<String, Integer> freq = new HashMap<>(); // <Key,Value> 


    public Assignment4(final String fileName) { 
     this.filename = fileName; 
    } 

    public void processFile() throws IOException { 
     File file = new File(filename); 
     BufferedReader reader; 

     try { 
      FileReader fileReader = new FileReader(file); 
      reader = new BufferedReader(fileReader); 
      file = null; 

      String text = ""; 
      String line = reader.readLine();  
      while (line != null) { 
       text = text + line + " "; 
       line = reader.readLine(); 
      } 

      StringTokenizer st = new StringTokenizer(text); 
      wordcount = st.countTokens(); 
     } 

    } 

    public String getFileName() { 
     return filename; 
    } 

    public int getTokenCount() { 
     return freq.size; 
    } 

    public int getTokenCount(final String key) { 
     return freq.get(key); 
    } 

    public ArrayList<String> getTokensHavingCount(final int count) { 

     ArrayList<String> wordCount = new ArrayList<String>(); 

     Set<String> set = freq.keySet(); 
     for (String word : set) { 
      int noOfTimes = freq.get(word); 
      if (noOfTimes == count) 
       freq.add(word); 
     } 
     return wordCount; 
    } 

    public ArrayList<String> getTokensHavingLength(final int length) { 

     ArrayList<String> wordlength = new ArrayList<String>(); 

     Set<String> set = freq.keySet(); 
     for (String word : set) { 
      if (word.length() == length) 
       wordlength.add(word); 
     } 

     return wordlength;  
    } 

    public int getCountOfTokensHavingCount(final int count) { 
     return getTokensHavingCount(count).size(); 
    } 

    public int getCountOfTokensHavingLength(final int length) { 
     return getTokenHavingLength(count).size; 
    } 

    public double getAverageOfCounts() { 

     ArrayList<String> wordlength = new ArrayList<String>(); 
     double sum = 0.0d; 
     Set<String> set = freq.keySet(); 
     for (String word : set) { 
      sum += freq.get(word); 
     } 
     return sum/(double) freq.size(); 
    } 
} 

Bonus # 1: eine Funktion namens getCountOfTokensHavingCount() hinzufügen, die ein int-Argument (count) annimmt, und gibt die Anzahl der Token, die erscheinen in der Eingabedatei genau "zählen" mal.

Bonus # 2: Fügen Sie eine Funktion namens getCountOfTokensHavingLength() hinzu, die ein int Argument (length) akzeptiert und die Anzahl der Token zurückgibt, die in der Eingabedatei mit genau "length" Zeichen im Token erscheinen.

+3

"Eine Funktion hinzufügen ..." Womit fügen wir eine Funktion hinzu? Es ist unmöglich zu antworten, ohne dies zu wissen, z. Sie verweisen auf eine "Eingabedatei" und "Token", geben jedoch keine Details dazu an, wie diese aktuell erhalten werden. –

+0

Bitte geben Sie den vollständigen Code an, den Sie bereits haben. Sie scheinen mit Dateien zu arbeiten. Ohne den vollständigen Code aller Klassen, die Sie verwenden, kann Ihnen niemand helfen. –

+0

Tipp für # 1: 'Map '. –

Antwort

0

Ok, ein paar Dinge.

  • Ihre Funktion processFile tut nicht, was sie tun sollte. Ihre Aufgabe ist es zu zählen, wie oft jedes Wort im Text erscheint. Idee: Lies die Datei Wort für Wort (siehe java.util.Scanner); Wenn das Wort nicht bereits in Ihrem HashMap ist, fügen Sie das Wort als den Schlüssel und die Zahl 1 als den Wert hinzu; Wenn das Wort bereits in Ihrem HashMap ist, erhöhen Sie den Wert um eins.
  • Warum stellen Sie file = null in processFile ein? Sie sollten die BufferedReader stattdessen ordnungsgemäß schließen, indem Sie eine finally verwenden. Java kann das automatisch für Sie tun: try(FileReader freader = new FileReader(file); BufferedReader breader = new BufferedReader(freader)) { // Your actual code }.
  • Ihre getTokenCount Funktion sollte freq.size() zurückgeben (Sie rufen eine Funktion, kein Attribut!).
  • Verwenden Sie bitte auch immer geschweifte Klammern nach einem if oder eine Schleife, unabhängig davon, gibt es nur eine Sache, die Sie tun oder einen riesigen Codeblock.
+0

Ihre try-with-resources räumen nicht ganz richtig auf: Wenn eine Ausnahme in der Konstruktion des 'BufferedReader' geworfen wird, wird' FileReader' nicht geschlossen. Es sollte in einer separaten Initialisierungsanweisung stehen: "try (A a = neu A(); B b = neu B (a)) {' –