在我的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;
}
}
}
但真的需要休息吗?现在有点恼火: - )
问候!
答案 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语言中有一个类似的行,如果不能继续。