如果 - 否则有刺激性?

时间:2014-02-26 13:51:02

标签: java if-statement

我做了一个计时器,检查我的twitch.tv流是否脱机。该方法全部执行30秒。

如果我的流在线,则机器人将自动连接到我的流。

如果我的Stream离线时有一个INT,它将在所有30秒内+1,如果它达到10,这是5分钟,机器人应该只是分配IRC频道。

但不知何故,机器人继续计数。我的if / else语句是否有任何错误?

一旦我的Stream离线,机器人就会开始计算所有30秒+1。但是当它达到10时它会变得更高......现在它已经在30了但是我不确定为什么它不会分配频道。

这是我的功能;

public void livemodetimer() {



    if(livemode == "off" && TwitchStatus.isstreamlive){
        livemode = "on";

    }else 

    if(livemode == "on" && TwitchStatus.isstreamlive == false){
        zaehler = zaehler+1;

         System.out.println("Stream Offline Counter. Disconnect bei (10).  Aktuell:"+zaehler);

    }else

        if(livemode == "on" && TwitchStatus.isstreamlive == true){
            zaehler = 0;


    if(zaehler >= 10){
        livemode = "off";
        zaehler = 0;
    }



    if (TwitchStatus.isstreamlive && livemode == "on" && multistartprepare == false){
    joinChannel("#"+YBot.MyBot.ownerchannel+"");
    multistartprepare = true;
    startup();
    }

    if(TwitchStatus.isstreamlive == false && livemode == "off" && multistartprepare == true){
          sendMessage("#"+YBot.MyBot.ownerchannel+"","Da der Stream Offline ist verzieh ich mich mal =) Bye!!");
    partChannel("#"+YBot.MyBot.ownerchannel+"");
    multistartprepare = false;
    zaehler = 0;

    TTmsg.cancel();
    TTmsg.purge();
    }
}

有没有人知道为什么它在达到10时不会调用partchannel内容。

以下编辑版本:

public void livemodetimer() {



    if(livemode == false && TwitchStatus.isstreamlive){
        livemode = true;

    }else 

    if(livemode && TwitchStatus.isstreamlive == false){
        zaehler = zaehler+1;

         System.out.println("Stream Offline Counter. Disconnect bei (10).  Aktuell:"+zaehler);

    }else


    if(livemode && TwitchStatus.isstreamlive == true){
        zaehler = 0;
    }


    if(zaehler >= 10){
        livemode = false;
        zaehler = 0;
    }



    if (TwitchStatus.isstreamlive && livemode && multistartprepare == false){
    joinChannel("#"+YBot.MyBot.ownerchannel+"");
    multistartprepare = true;
    startup();
    }

    if(TwitchStatus.isstreamlive == false && livemode == false && multistartprepare){
          sendMessage("#"+YBot.MyBot.ownerchannel+"","Da der Stream Offline ist verzieh ich mich mal =) Bye!!");
    partChannel("#"+YBot.MyBot.ownerchannel+"");
    multistartprepare = false;
    zaehler = 0;

    TTmsg.cancel();
    TTmsg.purge();
    }    
}

3 个答案:

答案 0 :(得分:4)

你有几个问题。

你的陈述没有结束括号

if(livemode == "on" && TwitchStatus.isstreamlive == true){
            zaehler = 0;

很难说你希望关闭块的位置,部分原因是你的代码使用标签缩进,这在这里没有得到很好的显示(同样,don't mix tabs and spaces,你的代码编辑器应该有办法将一个转换为另一个)。使用一致的缩进可以帮助我避免对括号嵌套感到困惑。

因为缩进不清楚我不确定你想要else子句做什么,所以最好使用大括号来明确地显示你想要执行的块。使用像One True Brace style这样的一致格式设置方案将是一个很大的帮助。

基本上选择一种一致的方式来格式化您非常明确的代码并坚持下去,并且您将有更轻松的时间。

使用==进行字符串比较是不好的(因为它比较了引用,你可以有2个单独的引用,它们都持有" on",而==将返回false)。您应该使用equals方法,因为它会比较值。

同样使用== true进行布尔比较是多余的。它不会伤害任何东西,它看起来很尴尬。

答案 1 :(得分:1)

您需要将字符串与==进行比较,以便将其与equals

进行比较
if(livemode == "on")

不会测试livemode中的是否等于“on”。相反,它测试这两个对象是否在同一个物理内存位置,这绝对是你不想要的,因为很明显两个不同对象中的两个字符串可以包含相同的

将其更改为

if(livemode.equals("on")

答案 2 :(得分:1)

您的if语句字符串比较应使用.equals()

String是Java中的Object类型,意味着它需要调用.equals()函数才能将其与其他字符串进行正确比较。 ==运算符,如果我没有弄错(我经常这样),将比较对象的内存位置,并在比较失败时报告false

if ( livemode.equals("on") && ...

应该解决你的问题。