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

现在According to google,每秒有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 - 1000000000纳秒似乎不等于一秒,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27201623/

10-09 00:22