为什么我的java函数没有从另一个类的输出调用?

为什么我的java函数没有从另一个类的输出调用?,java,discord,discord-jda,Java,Discord,Discord Jda,我正在编写一个discord bot,在一个私有服务器中使用,只是为了搞乱。这是我第一次使用java。我正在使用Discord JDA库对bot进行编码。然而,我不认为这是主要问题 对于如何从我创建的单独类中的特定方法中提取输出,我感到困惑 我试图将一个字符串从名为Color.java的单独类中的公共字符串方法拉入名为Commands.java的文件中。此字符串将通过使用带有随机数生成器的数组列表进行随机 这是我的Commands.java代码。这不是主文件,而是与问题相关的文件,更具体地说是此

我正在编写一个discord bot,在一个私有服务器中使用,只是为了搞乱。这是我第一次使用java。我正在使用Discord JDA库对bot进行编码。然而,我不认为这是主要问题

对于如何从我创建的单独类中的特定方法中提取输出,我感到困惑

我试图将一个字符串从名为Color.java的单独类中的公共字符串方法拉入名为Commands.java的文件中。此字符串将通过使用带有随机数生成器的数组列表进行随机

这是我的Commands.java代码。这不是主文件,而是与问题相关的文件,更具体地说是此代码的最后一个else if{}

public class Commands extends ListenerAdapter {
    @Override
    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {

        String[] args = event.getMessage().getContentRaw().split(" ");

        if (args[0].equalsIgnoreCase(bot.prefix + "info")) {
            event.getChannel().sendTyping().queue();
            event.getChannel().sendMessage("This is a test info description").queue();
        }

        else if (args [0].equalsIgnoreCase(bot.prefix + "ping")) {
            long ping = event.getJDA().getGatewayPing();

            event.getChannel().sendMessage(ping + "ms").queue();
        }

        else if (args [0-100].equalsIgnoreCase("white")){
            
            Race newColorobj = new Color();
            String white_test = newColorobj.white();
            event.getChannel().sendMessage(white_test + ".").queue();
        }
    }
}
我打算从这个文件Color.java中提取最后一个“elseif”,从数组列表“white”中选择一个随机的文本字符串,并将其输出到discord聊天频道

public class Color {

    Random rand = new Random();
    int upperbound = 1;

    int int_random = rand.nextInt(upperbound);

    public String white() {

        ArrayList<String> white = new ArrayList<String>();

        white.add("This is a test");

        return white.get(int_random);

    }
}
如果用户试图对bot说“白色”,它不会用我想要的文本字符串进行响应


我对Java还是新手。我做错了什么?

我要检查命令ping和info是否正常工作?无论如何,我认为你的问题就在这里

 else if (args [0-100].equalsIgnoreCase("white"))
难道不是这样吗

else if (args [0].equalsIgnoreCase("white"))

找到了解决方案:在Color.java内部,我需要将公共字符串white(){}更改为公共字符串white(String…args){}

公共类颜色{
Random rand=新的Random();
int上限=1;
int_random=rand.nextInt(上限);
公共字符串白色(字符串…参数){
ArrayList white=新的ArrayList();
白色。添加(“这是一项测试”);
返回white.get(int_random);
}
}

如果执行的OP会得到一个
ArrayIndexOutOfBoundsException
,但是没有,所以这是一个问题,但不是OP问题的答案,我认为使用[0-100]可以在多达100个参数中查找关键字。因为[0]表示它只查看消息中的第一个单词。@colinkhoe no.
args[0-100]
args[-100]
相同,任何负索引都会抛出索引越界异常。很高兴知道。我通过使用“I”循环并使用args[I]读取接收到的消息中的每个单词来解决这个问题。错误消息与问题中的代码没有关联。请显示相关的类别和代码。
else if (args [0].equalsIgnoreCase("white"))
public class Color {

    Random rand = new Random();
    int upperbound = 1;

    int int_random = rand.nextInt(upperbound);

    public String white(String... args) {

        ArrayList<String> white = new ArrayList<String>();

        white.add("This is a test");

        return white.get(int_random);

    }
}