Finding Anagrams
A very simple way to find all anagram classes. example is mainly to illustrate the use of the Dictionary class (defined is class and your Project#5), and also a sample implementation of the two sorting algorithms discussed in class.
import java.awt.*; import java.applet.Applet; public class Anagrams extends Applet { Dictionary D = new Dictionary(); int N = D.nWords; // number of words // dict is the dictionary of words, and signature is their sigs String[] dict, signature; // Gui TextArea text; public void init() { makeGui(); dict = new String[N]; signature = new String[N]; // set up dictionary and form signatures for (int i=0; i < N; i++) { // Get the ith word from the dictionary dict[i] = D.getWordAt(i); //signature[i] = dict[i]; // For its signature signature[i] = formSignature(dict[i]); } text.appendText(N+" words processed.\n\n"); // sort signatures (and corresponding dict entries) dictSort(dict, signature, N); } // init public void paint(Graphics g) { // scan the array for anagrams and print the anagram classes for (int i = 0; i < N-1; i++) { if (signature[i].equals(signature[i+1])) { // found an anagram class // print the first word in the class text.appendText(dict[i]); // Run through the rest and print them do { i++; text.appendText(" " + dict[i]); } while (signature[i].equals(signature[i+1])); text.appendText("\n"); } } } // paint private void dictSort(String[] w, String[] s, int n) { // we will use insertion sort here String e1, e2; int p; for (int i = 1; i < n; i++) { // insert s[i] in s[0]..s[i] e1 = s[i]; e2 = w[i]; for (p = i; p > 0 && (e1.compareTo(s[p-1]) < 0); p--) { s[p] = s[p-1]; w[p] = w[p-1]; } // place e1 in s[p] s[p] = e1; w[p] = e2; } } //dictSort private String formSignature(String s) { char[] word = s.toCharArray(); int n = s.length(); int p; char temp; // sort letters in word (using selection sort) for (int i = 0; i < n-1; i++) { // place find the smallest char in word[i]..word[n-1] p = i; for (int j = i+1; j < n; j++) if (word[j] < word[p]) p = j; // Swap word[i] and word[p] temp = word[i]; word[i] = word[p]; word[p] = temp; } s = new String(word); return s; } // formSignature private void makeGui() { // The applet has a textArea text = new TextArea("Anagrams\n-------------\n\n", 20, 40, TextArea.SCROLLBARS_BOTH); text.setBackground(new Color(255, 153, 0)); add(text); } // makeGui } // Anagrams