gpt4 book ai didi

java - 为什么 "<= 1"没有按预期工作?

转载 作者:行者123 更新时间:2023-12-02 07:50:26 25 4
gpt4 key购买 nike

我有以下代码

@EventHandler
public void onPlayerQuit(PlayerQuitEvent event){
Player player = event.getPlayer();
final Player[] playerlist = getServer().getOnlinePlayers();
if (playerlist.length <=1) { // if no players are online
getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
// this is a scheduler.
public void run(){
if(playerlist.length <=1){
getServer().shutdown();
}
}
}, 6000L); // runs every 6000 ticks, which is every 300 seconds, which is every 5 minutes.
}
}

当一名玩家离开时,它会检查他是否是最后一个,如果是,那么 5 分钟后,它会再次检查,如果仍然没有人在,则应该停止服务器。

在此行中:

if (playerlist.length <=1) { // if no players are online

我必须将其设置为<=1,否则它根本不起作用,但如果我离开,它也会停止服务器,然后重新加入,我是唯一的一个。当我把它设置为=0并且只是<1时,它不起作用。

有什么想法吗?

这是我的更新代码(仍然不起作用):

 @EventHandler
public void onPlayerQuit(PlayerQuitEvent event){
Player player = event.getPlayer();
final Player[] playerlist = getServer().getOnlinePlayers();
if (playerlist.length <=1) { // if no players are online
getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
// this is a scheduler.
public void run(){
final Player[] playerlist = getServer().getOnlinePlayers();
if(playerlist.length <=1){
getServer().shutdown();
}
}
}, 500L); // runs every 6000 ticks, which is every 300 seconds, which is every 5 minutes.
}
}

最佳答案

您所写的内容不起作用的原因是您使用了 <= 。如果有人注销并且没有人留下,则任务会被安排。如果有人在 5 分钟或更短的时间内重新登录并保持在线状态,则当计划任务检查服务器是否应关闭时,1 <= 1true所以服务器关闭。

您提到仅使用 =不起作用,这是因为在 boolean 语句中,==必须用于检查相等性。

尝试使用这个:

if (playerlist.length == 0) { // if no players are online
// Do stuff
}

更新(在评论中讨论):我不太了解 Bukkit API,但这就是我假设当时发生的情况:在线玩家列表在 onPlayerQuit() 之后更新。被执行。试试这个:在你的 onPlayerQuit() 里面方法,尝试检查playerlist.length == 1在您的任务中,检查 playerlist.length == 0

关于java - 为什么 "<= 1"没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10286213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com