如果Else Statement,则输出两倍

时间:2014-03-05 13:13:53

标签: java if-statement irc

在我的IRC机器人中,只要有人输入!highfivetest,机器人会发出两次消息。 我的if-else出了什么问题?

Arry String;

public String[] moderatoren = {"furby1987","furbybot"}; // Moderatoren

CmdOutput;

        if (message.equalsIgnoreCase("!highfivetest")){
            for(int i2 = 0; i2 < moderatoren.length; i2++){  
                if (sender.equals(moderatoren[i2])){
                    sendMessage (channel, "!highfive");
                }else{              
                    sendMessage(channel, "Nur eingetragene Moderatoren haben Zugriff auf diesen Befehl. Sry <3"); 
                }
            }
        }

通常,我只是这样打字;

            if (message.equalsIgnoreCase("!highfivetest")){
                for(int i2 = 0; i2 < moderatoren.length; i2++){  
                    if (sender.equals(moderatoren[i2])){
                        sendMessage (channel, "!highfive");
                    break;
                    }else{              
                        sendMessage(channel, "Nur eingetragene Moderatoren haben Zugriff auf diesen Befehl. Sry <3"); 
                    break;
                    }
                }
            }

但真的需要休息吗?现在有点恼火: - )

问候!

3 个答案:

答案 0 :(得分:6)

错误消息应发送到外部 for循环。否则,将为每个未发送!highfivetest消息的主持人打印。要简化代码,您可以将主持人数组更改为List,然后使用List.contains方法。

示例1:

boolean vonModeratorGesendet = false;
for (int i2 = 0; i2 < moderatoren.length; i2++) {
    if (sender.equals(moderatoren[i2])) {
        vonModeratorGesendet = true;
        // you could also send "!highfive" from here
        break;
    }
}
if (vonModeratorGesendet) {
    sendMessage (channel, "!highfive");
} else {
    sendMessage(channel, "Nur eingetragene Moderatoren haben Zugriff auf diesen Befehl. Sry <3");
}

示例2:

List<String> moderatorenListe = Arrays.asList(moderatoren);
if (moderatorenListe.contains(sender)) {
    sendMessage (channel, "!highfive");
} else {
    sendMessage(channel, "Nur eingetragene Moderatoren haben Zugriff auf diesen Befehl. Sry <3");
}

示例2是更好的选择。您不必将数组转换为List,也可以始终使用List(这就是我要做的)。

答案 1 :(得分:1)

您的if-else没问题,问题可能出在for循环或其他地方。

答案 2 :(得分:0)

用continue继续替换断点,这是你正在运行的循环。

            if (message.equalsIgnoreCase("!highfivetest")){
            for(int i2 = 0; i2 < moderatoren.length; i2++){  
                if (sender.equals(moderatoren[i2])){
                    sendMessage (channel, "!highfive");
                continue;
                }else{              
                    sendMessage(channel, "Nur eingetragene Moderatoren haben Zugriff auf diesen Befehl. Sry <3"); 
                continue;
                }
            }
        }

这应该有效,继续是它的c ++语法,因为我不熟悉java,但是如果你不打算在java语言中有一个类似的行,如果不能继续。