У меня есть следующий код для работы бот-чата. Однако он не работает должным образом. Когда я запускаю отладчик, он показывает, что «bye», по какой-то причудливой причине, продолжает присваиваться «ключевому слову». По логике все выглядит так, как будто оно должно работать по назначению. Но, видимо, нет. Любая помощь приветствуется. Я довольно новичок в программировании на Java.Java chatbot - код не работает по умолчанию
public class Chatbot {
public Chatbot()
{
}
/*
* Generates a variety of responses, based on what the user has stated
*/
public static void respond(String statement)
{
// use the findKeyword method to check for various cases of user statements
if(statement.length() == 0)
{
System.out.println("Please say something :)");
}
else if(findKeyword(statement, "hi") > 0 ||
findKeyword(statement, "hello") > 0 ||
findKeyword(statement, "hey") > 0 ||
findKeyword(statement, "hiya") > 0 ||
findKeyword(statement, "heya") > 0)
{
System.out.println("Hello to you too!");
}
else if(findKeyword(statement, "how are you") > 0 ||
findKeyword(statement, "hows it going") > 0 ||
findKeyword(statement, "howre you") > 0 ||
findKeyword(statement, "how ya doing") > 0 ||
findKeyword(statement, "yo wassup") > 0 ||
findKeyword(statement, "hey whats up") > 0 ||
findKeyword(statement, "whats up") > 0)
{
System.out.println("I'm good, how are you?");
}
}
/*
* findKeyword method, returns either a 0 or a 1
* @ 0 -- keyword not found
* @ 1 -- keyword found
*/
public static int findKeyword(String statement, String keyword)
{
// This is in case the keyword is not in the statement at all
if(!statement.contains(keyword))
{
return 0;
}
int position = statement.toLowerCase().indexOf(keyword.toLowerCase()); // position of the keyword in the statement
statement = " " + statement.toLowerCase().replaceAll("\'\",.?", "") + " "; // the purpose of this statement is to allow for us to search for specific phrases w/ spaces before and after the keyword
String sub = statement.substring(position, position + keyword.length() + 1); // isolates the keyword with 1 character before and after
String charBeforeKeyword = sub.substring(0, 1); // the character before the keyword
String charAfterKeyword = sub.substring(sub.length() - 1, sub.length()); // the character after the keyword
/*
* Now, we check to see if the characters we isolated before are letters; if they are *
* @ If they are letters...then our keyword is part of a bigger word (e.g. if we searched for "success" and it brought us "successful"
* @ If they are not letters, then we have found our keyword with punctuation and/or spaces before/after it
*/
if((charBeforeKeyword.compareTo("a") < 0 || charBeforeKeyword.compareTo("z") > 0)
&& (charAfterKeyword.compareTo("a") < 0 || charAfterKeyword.compareTo("z") > 0))
{
return 1;
}
return 0;
}
}
import java.util.Scanner;
public class Execute
{
public static void main(String [] args)
{
// Variables and Objects
Chatbot bot = new Chatbot();
Scanner input = new Scanner(System.in);
String statement = "";
// Prompt and get the user's first input
System.out.println("Type text to start chatting!");
statement = input.nextLine();
// While the user doesn't say goodbye or some other form of it, respond to user and then get their next response
while(bot.findKeyword(statement, "bye") != 1 &&
bot.findKeyword(statement, "cya") != 1 &&
bot.findKeyword(statement, "goodbye") != 1 &&
bot.findKeyword(statement, "gtg") != 1)
{
bot.respond(statement);
statement = input.nextLine();
}
System.out.println("Goodbye!");
}
}
Читайте, как опубликовать [mcve] а затем отредактируйте свой вопрос. – reformed
Вы не можете сказать, что «это не работает должным образом», но не сообщите нам, как оно должно работать. Расскажите нам, что произойдет и чего вы ожидаете, или мы ничего не сможем сделать. Приведите пример ввода вывода, который вы ожидаете. – nhouser9