繁体   English   中英

Java:If-else语句

[英]Java: If-else statement

我做了一个抽搐的IRC机器人。 我设置了一个小“系统”,以便在流在线时打开自己的电源,并在流不再在线时关闭它。

即时通讯使用以下代码:

if (TwitchStatus.isstreamlive && multistartprepare == false && multistartprepare2 == false){
    livemode = true;
    multistartprepare = true;
    startedAt = DateTime.now();
    startup();
}else{

    if (TwitchStatus.isstreamlive == false && multistartprepare){
      livemode = false;
      multistartprepare = false;
      multistartprepare2 = false;
      TTmsg.cancel();
      TTmsg.purge(); 
    }
}

isstreamlive是一个布尔值,当流实时运行时为true,或者当流脱机时为false。

isstreamlive通过发出JSON请求每5秒更新一次,并始终保持正确的值。

现在的问题是,startup()方法将为irc聊天中的问候消息激活计时器。 当我启动我的机器人时,计时器以某种方式发生了2到3次执行,所以我猜我的if else语句出了点问题。

布尔值multistartprepare和multistartprepare2在启动时为假,并且机器人在那里一次只能启动一次,直到流结束并且他可以脱机。

上面有什么问题吗? 猜猜代码被执行了很多次。

问候和对不起,英语不好:D

如果在if中也使用livemode变量,可能会有所帮助

if (TwitchStatus.isstreamlive &&
            !multistartprepare &&
            !multistartprepare2  &&
            !livemode) {

您可以通过设置超时机制来解决此问题,该超时机制可以防止您的漫游器在过去几秒钟内发送过该消息。

long lastSent = 0;
...
if (System.currentTimeMillis() - lastSent > 1000*5) { // 5 seconds elapsed
    ...
    // send message
    lastSent = System.currentTimeMillis();
}

您的设置方法可能有问题,或者服务器可能向您发送了多条联机消息,但是根据您到目前为止的信息很难分辨。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM