我做了一个计时器,检查我的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();
}
}
答案 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") && ...
应该解决你的问题。