Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

JAVA hi this is my code can you help me fix the bug here and change arraylist to

ID: 3817398 • Letter: J

Question

JAVA

hi this is my code

can you help me fix the bug here and change arraylist to basic array plz

---------------------------------------------------------------------------------------------------------

Do not change anything in Entry and SimpleList Class

Entry.java

public class Entry {

    //The word to store in the Entry, this will be a key value for your hash table.

    private String word;

    //The count of how many times the word appears.

    private int count;

    /**

     * Constructor that creates an {@code Entry} object given a word.

     *

     * @param word The word to set in the {@code Entry}.

     */

    public Entry(String word) {

        this.word = word;

        this.count = 1;

    }

    /**

     * Returns the word of this {@code Entry}.

     *

     * @return The word of this {@code Entry}.

     */

    public String getWord() {

        return this.word;

    }

    /**

     * Returns the count of how many times this word appears in the document.

     *

     * @return the word count.

     */

    public int getCount() {

        return this.count;

    }

    /**

     * Increases the count of the word in this {@code Entry} by one.

     *

     */

    public void incrementCount() {

        this.count++;

    }

    @Override

    public String toString() {

        String result = "";

        result += "Word: " + this.word + " " +

                "Count: " + this.count;

        return result;

    }

    public int hashCode(String str, int type) {

        //You must implement this method!!!!

       int hashValue;

       if(type ==1){ // primary hash

              hashValue = str.hashCode();

              return hashValue %7;

       }

       // secondary hash function

       hashValue = str.hashCode();

       return 7 - (hashValue % 7);

    }

}

SimpleList.java-----------------------------------------------------------------------------------------

public class SimpleList {

    //Initial size of the internal array.

    private static final int INITIAL_CAPACITY = 10;

    //Internal array of Entry objects.

    private Entry[] entries;

    //Size of the List

    private int size;

    /**

     * Constructor creates an empty {@code SimpleList} with default initial capacity.

     *

     */

    public SimpleList() {

        this.entries = new Entry[INITIAL_CAPACITY];

        this.size = 0;

    }

    /**

     * This method adds a new {@code Entry} to the end of the list. The list will also be resized when necessary.

     *

     * @param e The entry to add to the end of the list.

     */

    public void add(Entry e) {

        //Check to see if we need to resize the list

        if (this.size == this.entries.length) {

            this.resize();

        }

        this.entries[this.size] = e;

        this.size++;

    }

    /**

     * This function finds the {@code Entry} in the list whose word matches the given {@code String}. The function

     * returns the index of where the Entry can be found, or -1 if the {@code Entry} was not found.

     *

     * @param word The word whose {@code Entry} you want to find.

     *

     * @return Returns the index of where the {@code Entry} was found, -1 otherwise.

     */

    public int find(String word) {

        for (int i = 0 ; i < this.size ; i++) {

            Entry current = this.entries[i];

            if (word.equals(current.getWord())) {

                return i;

            }

        }

        return -1;

    }

    /**

     * This method returns the {@code Entry} at the given index.

     *

     * @param index The index of the {@code Entry} to return. {@code index} must be a positive value between 0 to

     *              size()-1 inclusive.

     * @return The {@code Entry} at the given index.

     */

    public Entry getEntry(int index) {

        return this.entries[index];

    }

    /**

     * This method returns the number of entries in the list.

     *

     * @return The number of entries in the list.

     */

    public int size() {

        return this.size;

    }

    /**

     * This method will create a new list double the size of the previous, and copy all values from the old list

     * to the new list.

     */

    private void resize() {

        Entry[] newList = new Entry[this.entries.length * 2];

        for (int i = 0 ; i < this.size ; i++) {

            newList[i] = this.entries[i];

        }

        this.entries = newList;

    }

    public String toString() {

        String result = "";

        String formatter = "%-20s%-1d";

        for (int i = 0 ; i < this.size ; i++) {

            Entry e = this.entries[i];

            result += String.format(formatter, e.getWord(), e.getCount()) + " ";

        }

        return result;

    }

}

HashTable.java-------------------------------------------------------------------------------------

import java.util.*;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

public class HashTable {

      

       //variable

      

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

       //constructor

       public HashTable(ArrayList<String> numbers){

              this.numbers = numbers;

       }

      

       public SimpleList generateSimpleList(){

              SimpleList obj = new SimpleList();

              for(int i = 0; i < numbers.size(); i++){

                     // add number

                     obj.add(new Entry(numbers.get(i)));

              }

              return obj;

       }

      

       private SimpleList generateHashTable(){

              SimpleList obj = new SimpleList();

              for(int i =0; i< numbers.size(); i++){

                     // add number

                     Entry entry = new Entry(numbers.get(i));

                     // get hash code

                     int hash = entry.hashCode(numbers.get(i), 1);

                    

                     if(obj.getEntry(hash)!= null){ // get hash code success

                           obj.entries[hash] = entry;

                     }

                     else{

                           hash = entry.hashCode(numbers.get(i),2);

                           obj.entries[hash] = entry;

                     }

              }

              return obj;

             

       }

      

// main function

      

       public static void main(String args[]) throws IOException{

              // read file

              JFrame frame = new JFrame();

              JFileChooser jfchooser = new JFileChooser();

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

              // jfchooser.showOpenDialog(null);

              jfchooser.showOpenDialog(frame);

              File selFile = jfchooser.getSelectedFile();

               FileReader reader= new FileReader(selFile);

               int num = 1;

              

               while (num != -1){

                    

               num = reader.read();

               list.add(String.valueOf(num));

               //System.out.println(list);

               }

             

             

              // creating object

              HashTable obj = new HashTable(list);

              obj.generateSimpleList();

              obj.generateHashTable();

       }

}

Explanation / Answer

I have done what you have asked for , coverted ArrayList to a normal array. But i see an error in your code for HashTable class inside generateHashTable() .

obj.entries[hash] = entry;

You are trying to access a private member "entries" directly , that is not permitted.

I understand what you are trying to do, you want to assingn the entry object to a given index which is equal to the hash value. For this you have add a new method say "addAt () "inside the SimpleList class so that you can insert an entry object at a specified index and do something like this :

obj.addAt( hash , entry);

Since you have instructed not to change the SimpleList class , i am not adding this method. PLease comment if you need any further help.

Below is the code that you asked for :

public class HashTable {
   
  
String[] numbers = null;
     
  
public HashTable(String []numbers){
this.numbers = numbers;
}
  
public SimpleList generateSimpleList(){
SimpleList obj = new SimpleList();
for(int i = 0; i < numbers.length; i++){

obj.add(new Entry(numbers[i]));
}
return obj;
}
  

private SimpleList generateHashTable(){
SimpleList obj = new SimpleList();
Entry []elist = new Entry[numbers.length];

for(int i =0; i< numbers.length; i++){

Entry entry = new Entry(numbers[i]);

int hash = entry.hashCode(numbers[i], 1);

if(elist[hash]!= null){ // get hash code success
elist[hash] = entry;
//obj.entries[hash] = entry;
}
else{
hash = entry.hashCode(numbers[i],2);
elist[hash] = entry;
//obj.entries[hash] = entry;
}
}

for(int i=0; i<numbers.length ;i++){
obj.add(elist[i]);
}
return obj;

}

  

  
public static void main(String args[]) throws IOException{
  
JFrame frame = new JFrame();
JFileChooser jfchooser = new JFileChooser();
String []list = new String[100];
           int count = 0;
/* jfchooser.showOpenDialog(null);*/
jfchooser.showOpenDialog(frame);
File selFile = jfchooser.getSelectedFile();
FileReader reader= new FileReader(selFile);
Integer num = 1;
  
           num = reader.read();
while (num != -1){
  
if(count >= list.length){
                  
                   String[] newList = new String[count*2];
                   for(int i=0;i<count;i++){
                       newList[i] = list[i];
                   }
                   list = newList;
               }
list[count] = num.toString();
               num = reader.read();
               count++;
/* System.out.println(list);*/
}


  
HashTable obj = new HashTable(list);
obj.generateSimpleList();
obj.generateHashTable();
}

}