The Artima Developer Community
Sponsored Link

Java Answers Forum
Word Frequency Application

0 replies on 1 page.

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 0 replies on 1 page
Hoody

Posts: 33
Nickname: hoodlum
Registered: Feb, 2002

Word Frequency Application Posted: Apr 7, 2002 9:33 PM
Reply to this message Reply
Advertisement
I had to design a program that reads a body of text from an input file, isolates the words in the text and writes them one per line to an output file then put the wordlist in alphabetical order and have a frequency count for each word in the word list.

now i had to use an array of objects so i made another class to use it from called WordsAndCount which is this...
class WordsAndCount
{
    // instance variables     
    private String Word;
    private int Frequency;
 
    /**
     * Constructor for objects of class WordsAndCount
     */
    public WordsAndCount()
    {
        // initialise instance variables
       Word = "unknown";
       Frequency = 0;
    }
 
   WordsAndCount(String w, int f)
    {
        // initialise instance variables
        Word = w;
        Frequency = f;
    }
}


this is the main class that i got an error in and cant seem to figure out whats wrong. can someone take a look and see if they can find any errors or just help me fix the program??

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.PrintWriter;[
import java.io.IOException;
import java.io.FileNotFoundException;
import java.util.StringTokenizer;
 
public class WordsFrequency
{
	public static void main(String[] args)
        throws IOException
        {
 
 
 
	    // Initializations
 
        FileReader reader = null;
        FileWriter writer = null;
 
        String inFileName = "TextIn.txt";
        String outFileName = "WordsReport.txt";
 
 
        // Open input and output files
 
   try
		{
			reader = new FileReader(inFileName);
			writer = new FileWriter(outFileName);
		}
 
   catch(FileNotFoundException e)
		{
			System.err.println("Cannot find input file ");
			System.exit(1); // abnormal termination status code
		}
 
   catch(IOException e)
		{
			System.err.println("Cannot open input/output file ");
			System.exit(2);
		}
 
	// Set up to read a line and write a line
	   BufferedReader in = new BufferedReader(reader);
	   PrintWriter out = new PrintWriter(writer);
	   WordsAndCount [] words;
	   WordsAndCount w = null;
	   words = new WordsAndCount[20];
        int wordCount = 0;
 
		for (int i = 0; i <wordCount; i++)
		{
 
						String word;
						String inputLine = in.readLine();
						// read in the name of each student and store in the array
						word = in.readLine();
	            		words[i] = w;
 
 
			    // initialize a tokenizer and attach it to a line
			   boolean done = false;
			   	   while(!done)
			   	   {
			   		   if(inputLine == null)
 
			   		   done = true;
 
			   		   else
			   		   {
			   			   StringTokenizer tokenizer = new StringTokenizer(inputLine, " ");
 
			   			   while( tokenizer.hasMoreElements() )
 
			   			   out.println( (String)tokenizer.nextElement() );
			   		   }
			       }
 
	  	}
 
 
    static void insertWord(String w)// error line illegal start of expression
   {
    // Insert the word w into the array of words, unless it already
    // appears there.  If the word already appears in the list,
    // add 1 to the counter for that word.  The words in the array are in
    // lower case,  and w is converted to lower case before it is processed.
    // Note that the words in the array are kept in alphabetical order.
    // If the array has no more space to hold w, then it is doubled
    // in size.
 
    int pos = 0;
 
    w = w.toLowerCase();
 
    /* Find the position in the array where w belongs, after all the
	   words that precede w alphabetically.  If a copy of w already
	   occupies that position, then it is not necessary to insert
	   w, so just add 1 to the counter associated with the word
       and return.
    */
 
    while (pos < wordCount && words[pos].word.compareTo(w) < 0)
	      pos++;
		if (pos < wordCount && words[pos].word.equals(w))
		{
	      words[pos].count++;
	      return;
		}
		insertWord(in.getAlpha());
   }
 
   static void putWordList(FileWriter outFileName)
   {
   // Write the list of words from the words array, along with their
   // associated frequencies, to the output stream specified in the
   // parameter to this subroutine.  Words are output in a column
   // that is 20 spaces wide.  If an individual word is longer than
   // 15 spaces, the output won't be quite so neat.
          for (int i = 0; i < wordCount; i++)
          {
             out.print("   ");
             out.println(words[i].word);
             for (int space = words[i].word.length(); space < 20; space++)
             out.println(" ");
             out.println(" ");
             out.println(words[i].count);
          }
   }
 
   static void sortByFrequency()
   {
    // Use insertion sort to sort the words in the list so that they
    // are in order of decreasing frequency.  (Note that insertion sort
    // has the following neat property:  In a group of words that all
    // have the same frequency, the words will remain in alphabetical
    // order after the words have been sorted by frequency.)
 
            for (int i = 1; i < wordCount; i++)
            {
                WordsAndCount temp = words[i];  // Save the word in position i.
                int position;              // An index in the array.
                position = i - 1;
                while (position >= 0 && words[position].count < temp.count)
              	{
                      // Bump words that have frequencies less than the frequency
                      // of temp up one space in the array.
                   words[position + 1] = words[position];
                   position--;
            	}
                words[position + 1] = temp;  // Put temp in last vacated space.
	}
    };
 
	}
 }

Topic: JDBC help needed Previous Topic   Next Topic Topic: I am just in Java.. Please help

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use