Moinsen,
Responder:
SupportSystem:
Wenn man die Main Methode ausführt wird ein Support Ticket mit Eingabefeld simuliert. Wenn der User nun z.B. nur "Vista" eingibt bekommt er eine vorgegebene Antwort vom Support System. Ich will es nun so programmieren, dass wenn der User schreibt "Ich habe ein Problem mit Vista" das er über die Methode contain() erkennt das man ein Key Word im imput vorkommt und dann die vorgegebene Antwort gibt. Hat da jemand einen Lösungsansatz für mich?
Responder:
Java:
public class Responder {
ArrayList <String> randomResponse;
HashMap <String, String> map;
/**
* Construct a Responder
*/
public Responder() {
this.randomResponse = new ArrayList<>();
this.map = new HashMap<>();
}
/**
* Generate a response to the user's input.
*
* @return A string that should be displayed as the response
*/
public String generateResponse(String input) {
if(map.containsKey(input)) {
return map.get(input);
}
else {
Random randomGenerator = new Random();
int randomNumber = randomGenerator.nextInt(randomResponse.size());
return randomResponse.get(randomNumber);
}
}
/**
* Saves a new response for random selection in cases
* when none of the known keywords is found.
*/
public void addSimpleResponse(String newResponse) {
randomResponse.add(newResponse);
}
/**
* Saves a new pair of keyword and response for cases
* when the user inputs the given keyword.
*/
public void addKeywordResponse(String keyword, String response) {
//TODO: implement this method!
map.put(keyword, response);
}
public void addSynonyms(String keyword, String... synonyms) {
}
}
SupportSystem:
Java:
public class SupportSystem
{
private InputReader reader;
private Responder responder;
/**
* Creates a technical support system and sets predefined responses.
*/
public SupportSystem()
{
reader = new InputReader();
responder = new Responder();
this.setResponses();
}
/**
* Start the technical support system. This will print a welcome
* message and enter into a dialog with the user, until the user
* ends the dialog.
*/
public void start()
{
boolean finished = false;
printWelcome();
while(!finished) {
String input = reader.getInput();
String input2 = input.trim();
input2 = input2.toLowerCase();
if(input2.startsWith("bye")) {
finished = true;
}
else {
String response = responder.generateResponse(input);
System.out.println(response);
}
}
printGoodbye();
}
/**
* Print a welcome message to the screen.
*/
private void printWelcome()
{
System.out.println("Welcome to the DodgySoft Technical Support System.");
System.out.println();
System.out.println("Please tell us about your problem.");
System.out.println("We will assist you with any problem you might have.");
System.out.println("Please type 'bye' to exit our system.");
}
/**
* Print a good-bye message to the screen.
*/
private void printGoodbye()
{
System.out.println("Nice talking to you. Bye...");
}
/**
* Adds a number of predefined responses to the responder.
*/
private void setResponses() {
final String VISTA = "vista";
final String LINUX = "linux";
final String CRASH = "crash";
final String GOOGLE = "google";
responder.addKeywordResponse(VISTA, "That is a known problem. Upgrade to Windows 10.");
responder.addKeywordResponse(LINUX, "Everything should be okay.");
responder.addKeywordResponse(CRASH, "That is a known problem. Just restart your computer.");
responder.addKeywordResponse(GOOGLE, "Sorry, this is a professional support system.");
responder.addSynonyms(VISTA, "wista", "windows xp", "windows 7", "windows 8");
responder.addSynonyms(LINUX, "ubuntu", "fedora");
responder.addSynonyms(CRASH, "shutdown");
responder.addSynonyms(GOOGLE, "bing", "yahoo");
responder.addSimpleResponse("That sounds interesting. Tell me more...");
responder.addSimpleResponse("Nice. Can you give me some more information?");
responder.addSimpleResponse("Terrible! We'll help you soon. Anything else...?");
}
}
Wenn man die Main Methode ausführt wird ein Support Ticket mit Eingabefeld simuliert. Wenn der User nun z.B. nur "Vista" eingibt bekommt er eine vorgegebene Antwort vom Support System. Ich will es nun so programmieren, dass wenn der User schreibt "Ich habe ein Problem mit Vista" das er über die Methode contain() erkennt das man ein Key Word im imput vorkommt und dann die vorgegebene Antwort gibt. Hat da jemand einen Lösungsansatz für mich?