Question
Java histogram re-size and copying. Hello everybody, I am really struggling with some parts of a java lab that I am doing, and would love
Java histogram re-size and copying.
Hello everybody, I am really struggling with some parts of a java lab that I am doing, and would love if someone could point out where I am running imto trouble.
The instructions are as follows:
I need help writing this code for java class.
Starter file: Project3.java and input file: dictionary.txt
Project#3 is an extension of the concepts and tasks of Lab#3. You will again read the dictionary file and resize the array as needed to store the words. Project#3 will require you to update a frequency counter of word lengths every time a word is read from the dictionary into the wordList. When your program is finished this histogram array will contain the following: at index [1], the number words of length 1. At index [2] then number of words of length 2 . . . at histogram[n] 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 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 commnd 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 statment 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.
If you do need to upsize your histogram then only upsize it to be just big enough for that particular word. 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 twenty six. In this case there would still be a zero at the [26] cell in the array that was put there when the Java compiler initialized all the cells to zero.
My code up to this point is this:
* 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 # # # # #
if ( wordCount >= wordList.length )
wordList = upSizeArr( wordList );
wordList[wordCount++] = word;
if (word.length() >= (histogram.length + 1))
histogram[word.length()]++;
// 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 )
{
String[] newArr=new String[fullArr.length*2];
for(int i =0;i< fullArr.length;++i){
newArr[i] = fullArr[i];
}
return newArr;
}
static String[] trimArr( String[] oldArr, int count )
{
String [] trimArr = new String[count];
for (int i = 0; i < trimArr.length; i++){
trimArr[i] = oldArr[i];
}
return trimArr;
}
// YOU MUST CORRECTLY COPY THE COUNTS FROM OLD HISTO TO NEW HISTO
static int[] upSizeHisto( int[] oldArr, int newLength )
{
int upSizeHisto[] = new int[newLength];
for (int i = 0; i
upSizeHisto[i] = oldArr[i];
}
return upSizeHisto; // just to make it complie you change as needed
}
} // END CLASS PROJECT#2
Any guidance on what aspects of my code are flawed would be greatly appritiated!
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started