我需要读取并加载一个文本文件并将元素添加到哈希表中;相反,用户输入数据

问题描述

我需要帮助来更改测试驱动程序。可以看到当前程序要求用户添加信息来存储元素,然后显示表格。我需要的是读取文本文件并加载元素,将元素添加到表格中并在表格中显示它们。这是一个使用单向链表/哈希表/链接的练习。正如我所说,如果您查看输出输出运行正常,但以创建的方式我需要输入或复制并粘贴单词。我需要读取file.txt,加载它,然后将元素插入表中。

public class HashTable {
      // array of linked list of Strings
      private LinkedList<String> table[];
      // constructor to initialize the array
      public HashTable() {
            // initializing array with capacity 13
            table = new LinkedList[13];
      }
      // method to insert an item to the table
      public void insert(String item) {
            // finding hash
            int index = hash(item);
            // if the linked list at location index is not initialized,initializing it
            if (table[index] == null) {
                  table[index] = new LinkedList<String>();
            }
            // adding this item to the linked list. replace with your linked list's
            // insert method if it differs from 'add'
            table[index].add(item);
      }
      // method to display the indices and the elements in linked lists at each indices
      public void displayTable() {
            // looping through table
            for (int i = 0; i < table.length; i++) {
                  // displaying index
                  System.out.printf("%2d : ",i);
                  // if current list is not initialized,displaying []
                  if (table[i] == null) {
                        System.out.println("[]");
                  } else {
                        // assuming toString method is defined for the linked list,// displaying list contents
                        System.out.println(table[i]);
                  }
            }
      }
      // method to hash a String
      private int hash(String str) {
            // initializing sum to 0
           int asciiSum = 0;
            // loops through the first three letters (or the available letters if
            // the length is less than 3)
            for (int i = 0; i < 3 && i < str.length(); i++) {
                  // adding ASCII value of current character to sum total
                  asciiSum += str.charat(i);
            }
            // finding hash and returning it
            int hash = asciiSum % table.length;
            return hash;
      }

      /**

      * for the ease of submission,I'm attaching the driver program within this 
      * class itself. You can move the below main method to whatever the class
      * you need,it will work.
      */

      public static void main(String[] args) {
            // defining a Scanner,a HashTable and reading words until 'done' is entered

            System.out.println("Enter Strings to add (type 'done' to finish)");
            
            //File file = new File("file.txt"); // 
            //Scanner input = new Scanner(file); //
            
            HashTable table = new HashTable();
            String input = "";
            while (!input.equalsIgnoreCase("done")) {
                  input = scanner.next();
                  if (!input.equalsIgnoreCase("done")) {
                        //adding to table
                        table.insert(input);
                  }
            }
            //closing scanner
            scanner.close();
            //displaying hash table
            System.out.println("Hash Table:");
            table.displayTable();
      }
}

//OUTPUT

Enter Strings to add (type 'done' to finish)

DEAR MARLIN
THE AARDVARKS AND THE CAMELS WERE MISTAKENLY SHIPPED TO THE AZORES
SORRY ABOUT THAT  
SINCERELY JIM
PS ANTS AND BATS AND COWS AND CATS ARE ANIMALS
COWS ARE BIG BUT ANTS ARE SMALL AND BATS AND CATS ARE IN BETWEEN

done

Hash Table:

0 : [AZORES,THAT,SINCERELY]
1 : [CAMELS,BUT]
2 : [ABOUT,BIG]
3 : [MARLIN,AND,JIM,AND]
4 : [THE,AARDVARKS,THE,WERE,SMALL]
5 : []
6 : [ANTS,ANTS]
7 : [DEAR,SHIPPED,TO,PS,BATS,BATS]
8 : [CATS,ARE,ANIMALS,CATS,IN]
9 : []
10 : [SORRY]
11 : [BETWEEN]
12 : [MISTAKENLY,COWS,COWS]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)