【问题标题】:Java: If-else statementJava:If-else 语句
【发布时间】:2015-03-15 06:35:44
【问题描述】:

我制作了一个 twitch 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

【问题讨论】:

    标签: java if-statement


    【解决方案1】:

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

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

    【讨论】:

    • 为什么会有任何改变? :困惑:
    【解决方案2】:

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

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

    您的设置方法可能有问题,或者服务器可能向您发送了多条上线消息,但根据您目前掌握的信息很难判断。

    【讨论】:

      猜你喜欢
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 2019-04-09
      • 2017-02-05
      • 2015-07-06
      相关资源
      最近更新 更多