java - 如何让我的不和谐机器人生成随机响应
问题描述
这是我通过观看快速教程视频制作的通用机器人。
public class App extends ListenerAdapter
{
public static void main( String[] args ) throws Exception
{
JDA jda = new JDABuilder(AccountType.BOT).setToken(reference.token).buildBlocking();
jda.addEventListener(new App());
}
@Override
public void onMessageReceived(MessageReceivedEvent evt)
{
User objUser = evt.getAuthor();
MessageChannel obgMsgCh = evt.getChannel();
Message obgMsg = evt.getMessage();
//Ping bot
if (obgMsg.getContentRaw().equalsIgnoreCase(reference.prefix+"ping")||(obgMsg.getContentRaw().contains("angry")))
{
// Response
obgMsgCh.sendMessage(objUser.getAsMention()+" HI").queue();
}
}
}
我如何让机器人响应数组或数组列表中的字符串?例如。早些时候我试着做
String [] responses = new String[5];
responses[0] = "HELLO";
responses[1] = "I'M ANGRY";
responses[2] = "STOP DOING THAT";
responses[3] = "DO NOT";
responses[4] = "NO";
Random randNum = new Random();
obgMsgCh.sendMessage(objUser.getAsMention()+responses[(randNum.nextInt(responses.length))]).queue();
但是,它不断给我数组索引越界错误。我需要一个for循环吗???我目前正在学习java的基础知识,所以如果你能解决这个问题,请使用//解释。
编辑:将我的索引从 5 更正为 4,因此它保持在数组的长度范围内。我的机器人实际上正在响应,但在控制台中发生了 10 次此错误。我的机器人对一个 ping 响应了两次。
[JDA MainWS-ReadThread] ERROR JDA - One of the EventListeners had an uncaught exception
java.lang.ArrayIndexOutOfBoundsException: 5
编辑:机器人现在以随机答案响应。但它有奇怪的间隔。图片
解决方案
您正在执行responses[(randNum.nextInt(responses.length))]
whereresponses.length
返回 5,因此randNum.nextInt(responses.length)
可能会返回 5,但在您的数组中(因为它从 0 开始)responses[4]
是最大值!
推荐阅读
- templates - 为什么我的树枝代码没有在我的视图文件中呈现模板?
- c++ - CMake 将 C++ 参数传递给 nvcc
- amazon-web-services - 再次运行查询时,AWS Athena 查询返回格式不正确的结果
- r - 有条件地更改最后一列的值
- objective-c - 在Objective-C中,当实现一个在后台任务完成后调用完成处理程序的方法时,如何确定线程安全?
- python - 在 Python 中编写条件语句的更简洁的方法
- copy-paste - 在 Python 中复制文件 - 读写 vs Shutil.copy
- kotlin - Kotlin 如何使用扩展单个基类的对象创建缓存
- flutter - 颤动中的盒子阴影没有出现
- mysql - 检查子查询结果是否存在,然后减去它