Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

You will load the dictionary into the array and resize the array (by doubling its current .length) as needed anytime it gets full. As each

You will load the dictionary into the array and resize the array (by doubling its current .length) as needed anytime it gets full. As each word is read in you will also update an array of frequency counters that record how many words of length 1 or length etc were in the file. When your program is finished this array will contain the following: at index [1], the number words of length 1. At index [2] then number of words of length 2, and thus at histogram[n] will be stored the number of words of length n. Since there will be no words of length zero, there will be a zero in histogram[0]. The [0] slot is thus ignored/wasted but that is a small price to pay to avoid off by one dissonance between word length and index.

The histogram is just a plain array of int that is initialized to length zero. Recall that Java allows us to define a new array with a length of zero. It happens every time you run a Java program with no command line arguments. Doing so initializes the args array to have length zero. Every time you read a word from the dictionary you cannot just execute an increment statement such as

 ++histogram[word.length()]; 

This is the correct statement to execute, but you must first make sure the histogram is long enough to have a cell at that index. If your current word has length of 7, you must first make sure that your histogram array has a .length of at least 8 (not 7) because the [7] cell of the array is actually the eighth cell.

Whenever you encounter a word whose length is >= the length of your frequency counter array, upsize your counter array to be just big enough (length+1) for that particular length value (length+1). At the end of the program it is possible that you could have gaps in your histogram if (depending on the input file) there were no words of length 7 or 13 or 26 and so on. In this case there would still be a zero at index 7 or 13 or 26.

Here is the code so far:

/* Project2.java Dynamic histogram */

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

public class Project2 { static final int INITIAL_CAPACITY = 10; public static void main (String[] args) throws Exception { // ALWAYS TEST FIRST TO VERIFY USER PUT REQUIRED INPUT FILE NAME ON THE COMMAND LINE if (args.length < 1 ) { System.out.println(" usage: C:\\> java Project2 "); // i.e. C:\> java Project2 dictionary.txt System.exit(0); } int[] histogram = new int[0]; // histogram[i] == # of words of length n

/* array of String to store the words from the dictionary. We use BufferedReader (not Scanner). With each word read in, examine it's length and update word length frequency histogram accordingly. */

String[] wordList = new String[INITIAL_CAPACITY]; int wordCount = 0; BufferedReader infile = new BufferedReader( new FileReader(args[0]) ); while ( infile.ready() ) { String word = infile.readLine(); // # # # # # DO NOT WRITE/MODIFY ANYTHING ABOVE THIS LINE # # # # #

// test to see if list is full. If needed do an up size (just like Lab#3)

// now you may safely append word onto list and incr count

// look at the word length and see if the histogram length is AT LEAST // word length + 1. If not, you must upsize histogram to be EXACTLY word length + 1 // now you can increment the counter in the histogram for this word's length // # # # # # DO NOT WRITE/MODIFY ANYTHING BELOW THIS LINE # # # # # } //END WHILE INFILE READY infile.close();

wordList = trimArr( wordList, wordCount ); System.out.println( "After final trim: wordList length: " + wordList.length + " wordCount: " + wordCount );

// PRINT WORD LENGTH FREQ HISTOGRAM for ( int i = 0; i < histogram.length ; i++ ) System.out.format("words of length %2d %d ", i,histogram[i] );

} // END main

// YOU MUST CORRECTLY COPY THE STRING REFS FROM THE OLD ARR TO THE NEW ARR static String[] upSizeArr( String[] fullArr ) { return null; // just to make it complie you change as needed } static String[] trimArr( String[] oldArr, int count ) { return null; // just to make it complie you change as needed }

// YOU MUST CORRECTLY COPY THE COUNTS FROM OLD HISTO TO NEW HISTO static int[] upSizeHisto( int[] oldArr, int newLength ) { return null; // just to make it complie you change as needed } } // END CLASS PROJECT#2

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

SQL For Data Science Data Cleaning Wrangling And Analytics With Relational Databases

Authors: Antonio Badia

1st Edition

3030575918, 978-3030575915

More Books

Students also viewed these Databases questions

Question

2. To compare the costs of alternative training programs.

Answered: 1 week ago