public class ChatBot {
String[][] chatBot={
// standard greetings
{ "hi", "hello", "hey" }, { "hi user"},
// question greetings
{ "how are you" }, { "good"},
// default
{ "I did not understand. Please try something else" }, };
public ChatBot() {
}
public String checkAnswer(String message) {
byte response = 0;
int messageType = 0;
String x = null;
List temp;
int cblength = chatBot.length - 1;
while (response == 0 && messageType <= cblength) {
temp = Arrays.asList(chatBot[messageType]);
if (temp.contains(message)) {
response = 2;
x = chatBot[(messageType) + 1][0];
}
messageType = messageType + 2;
if (response == 1)
x = chatBot[chatBot.length - 1][0];
}
}
return x;
}
我创建了这个简单的聊天机器人来测试我的聊天应用程序。它使用二维字符串数组来保存可能的输入和输出。 checkAnwer方法接收用户输入,并且应该返回正确的输出。如果字段的内容与数组匹配,它使用while循环检查输入字段并返回相应的输出。如果循环到达数组的末尾,则应该返回默认答案。第一组输入(hi / hello / hey)返回正确的输出(hi用户),但每隔一个输入都会导致while循环超过数组长度。
修改的
我删除了代码中的错误,现在接受所有输入,无效输入返回null。
EDIT2
我改变了int cblength = chatBot.length - 1;
至
int cblength = chatBot.length;
和messageType = messageType + 2;
到
if ((messageType+2)>=cblength)
{
response=1;
}
else {
messageType = messageType + 2;
}
代码现在正常运行。
答案 0 :(得分:0)
如果我正确理解你的代码,chatBot的长度为5.在while循环的每次完整传递中,messageType递增2.这意味着在第二次传递时,messageType = 2。这意味着在以下一行:
x = chatBot[(messageType * 2) + 1][0];
我们正在寻找(2 * 2)+1 = 5作为指数。由于列表长度为5,因此最大索引为4,导致IndexOutOfBoundsException。
我可以通过两种主要方式来解决这个问题: