1000000000 纳秒似乎不等于秒



我正在创造一些魔法咒语,显然我希望每次使用之间都有延迟。

现在根据谷歌的说法,一秒钟有1000000000纳秒。

然而,魔法咒语在不到两秒钟后就会充电。

@EventHandler
public void onInteract(PlayerInteractEvent e){
    Player p = e.getPlayer();
    if (p.getItemInHand().getType().equals(Material.BLAZE_ROD)){
        {
            {
                if (!kam.containsKey(p.getName())) kam.put(p.getName(), (long) 0);
                if (kam.get(p.getName()) < System.nanoTime()){
                    kam.remove(p.getName());
                    kam.put(p.getName(), System.nanoTime() + (1000000000 * 30));
                    //Do magic spell attack here.
                    }
                }
            }else{
                p.sendMessage(ChatColor.AQUA + "Skill recharging!");
            }
}

显然,我的代码正在尝试添加System.nanoTime()加 30 秒,然后检查当前系统nanoTime是否大于我放入哈希图的系统,如果是,请执行拼写。

我建议你打印出1000000000 * 30的值并检查它。你会发现它正在环绕,因为它太大而无法放入整数中。

换句话说,以下程序:

public class Test
{
    public static void main(String args[])
    {
        System.out.println(1000000000 * 30);
        System.out.println(1000000000L * 30);
    }
}

打印输出:

-64771072
30000000000

因此,如果您使用 long 变体,它将正常工作。

Java

中的裸数字文字被视为 int s,因此您的计算溢出。解决此问题的一种方法是使用long文本执行计算,方法是在文本后添加L

kam.put(p.getName(), System.nanoTime() + (1000000000L * 30L));

相关内容

  • 没有找到相关文章

最新更新