©2007 Felleisen, Proulx, et. al.
Our goal is to train our computer to be a mock psychiatrist, carrying on a conversation with a patient. The patient (the user) asks a series of questions. The computer-psychiatrist replies to each question as follows. If the question starts with one of the following (key)words: Why, Who, How, Where, When, and What, the computer selects one of the three (or more) possible answers appropriate for that question. If the first word is none of these words the computer replies 'I do not know' or something like that.
Start by designing the class
Reply that holds a keyword
for a question, and an
answers to a the question that starts with this keyword.
Design the method
randomAnswer for the class
Reply that produces one of the possible answers each time
it is invoked. Make sure it works fine even if you add new answers
to your database later. Make at least three answers to each
Design the class
Eliza that contains an
In the class
Eliza design the helper method
firstWord that consumes a
String and produces the first word in the
The following code may help you. Look up the details of how this works in the documentation for Java libraries.
System.out.println("Type in a question: "); s = input.nextLine(); Scanner firstWord = new Scanner(s).useDelimiter("[^a-zA-Z]"); System.out.println("The first word is: " + firstWord.next());
Make sure your program works if the user uses all uppercase letters, all lower case leeter, mixes them up, etc. (Again, let the Java documentation help you find the solution.)
In the class
Eliza design the method
answerQuestion that consumes the question
and produces the (random) answer. If the first word of the question
does not match any of the replies, produce an answer Don't ask
me that. -- or something similar. If no first word exists,
i.e., the user either did not type any letters, or just hit the
return, throw an
Of course, you need to define the
Interactions class design the method that
repeats asking questions and providing answers until it catches the
EndOfSessionException -- at which time it ends the game.
In the Algorithms class design a static method
that consumes an
ArrayList<T> and an instance of a class that
Comparator<T> and mutates the
so that it is sorted in the order given by the
It is possible to combine all parts into one method, but you must use the following helper methods:
swap that swaps in the given
elements at the two given locations.
findMinLoc finds in the given
location of the minimum element among all elements at the location
greater than or equal to the given location. Of course, it also
selectionSort method that is described at the beginning.
You can choose to use any of the loops we have seen (including the
Traversal<T>, and its implementation for
ArrayList<T>. However, as the second part of the problem you
must convert your solutions for
selectionSort to use either
while loop without the
for loop without the
If you already used one of these, convert the code to using the other
loop. Rename your methods as