/** * Uses a hash-coded data storage method to store items * from a file. a linked list is used as the method for * dealing with collisions * Uses try, catch, and finally */ import java.util.Scanner; import java.text.DecimalFormat; import java.io.*; import java.util.StringTokenizer; public class Hashing { HashTable table; final int TABLESIZE = 600; public Hashing() { table = new HashTable(TABLESIZE); } public void search() { int idToFind; Item location; Scanner scan = new Scanner(System.in); System.out.println("Testing search algorith\n"); System.out.print("Enter Id value to search for (-1 to quit)-->"); idToFind = scan.nextInt(); while(idToFind >= 0) { location = (Item)table.find(new Item(idToFind,0)); if(location == null) System.out.println("Id = " + idToFind + " No such part in stock"); else System.out.println("Id = " + location.getID() + " Inv = " + location.getInv()); System.out.println(); System.out.print("Enter Id value to search for (-1 to quit) --> "); idToFind = scan.nextInt(); } } public void stats() { DecimalFormat fmt =new DecimalFormat("0.00"); System.out.println(); int emptySpots = table.getNumberOfNulls(); System.out.println("Number of NULLs = " + emptySpots); double pts = (double)emptySpots*100.0/table.getCapacity(); System.out.print("% of NULL pointers for a table of size "); System.out.println(table.getCapacity()+" is " + fmt.format(pts)); double avgListLen = (double)table.getSize()/(table.getCapacity()- emptySpots); System.out.println("Average list length = "+ fmt.format(avgListLen)); System.out.println("The longest list = " + fmt.format(table.getLongestList())); System.out.println(); } public void loadFile() throws IOException { String fileName = "H:\\HashTable\\file400.txt"; int id, inv; String line=""; // declared out of try block so accessible BufferedReader inFile = null; // in later code FileReader fr = null; try { fr = new FileReader(fileName); inFile = new BufferedReader(fr); line = inFile.readLine(); System.out.println ("ID \t INVENTORY"); System.out.println ("First line read " + line); while (line != null) { StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { id = Integer.parseInt(tokenizer.nextToken()); System.out.print(id + "\t"); inv = Integer.parseInt(tokenizer.nextToken()); System.out.println(inv ); table.add(new Item(id, inv)); } line = inFile.readLine(); } } catch(NumberFormatException exception) { System.out.println("Error in input. Line ignored \n"); System.out.println(line); } catch(FileNotFoundException exception) { System.out.println ("The file " + fileName + " was not found \n"); } catch(IOException exception) { System.out.println(exception); } finally { if (line != null) { inFile.close(); } } } } /* Easier - no try, catch, finally int howMany = 400; for (int k = 1; k <= howMany; k++) { id = inFile.readInt(); inv = inFile.readInt(); table.add(new Item(id, inv)); } */