3

出于某种原因,我得到了函数返回的一致 3600:

private static long getCountdownLeft() {
    long now = System.currentTimeMillis();
    long elapsedMillis = now - initialTime; //difference of current 'current' time
    long millisLeft = secondsOfGame * 1000 - elapsedMillis;
    return millisLeft/1000;
}

public static void Main(String[] args ) {
     System.out.println("Time is " + getCountdownLeft());
}

private static int secondsOfGame = 3600;
private static long initialTime = System.currentTimeMillis();

这是事件驱动的。我希望每次调用该函数时都能看到时间上的差异。我只是使用 main 来表明我正在调用它。

4

3 回答 3

2

这很可能是因为它elapsedMillis是零。我建议System.nanoTime()用于计算经过的时间。

我不太确定你的代码是如何工作的(正如现在发布的那样),但这样的事情可能会奏效。请注意,您需要添加计算逻辑,这只是一个示例:

public class TimeTest {

    private long startTime;

    public TimeTest(){
        startTime = System.nanoTime();
    }

    public void computeTimeDifference(){
        long currentTime = System.nanoTime();
        long elapsedTime = currentTime - startTime;

        System.out.println("Difference: "+elapsedTime+ "ns");
    }

    public static void main(String[] args) {
        new TimeTest().computeTimeDifference();
    }
}
于 2012-08-02T04:16:41.363 回答
0

在调用 getCountdownLeft 之前,您的代码将花费很少的时间。尝试更新此代码:

    public static void Main(String[] args) throws InterruptedException {
    long gameTime = System.currentTimeMillis(); // pass the current time
    Thread.currentThread().sleep(1000); // sleep one second before invoke getCountdownLeft
    System.out.println("Time is " + getCountdownLeft(gameTime));
}
于 2012-08-02T04:17:35.717 回答
0

嘿,我刚刚为 prev、new 和 elapsed 变量添加了打印语句。值是

上一次 1343882409054

现在时间 1343882409054

经过时间 0

时间是3600

所以你的 millisLeft 将永远是 3600 。

但是如果你尝试使用

System.nanoTime()

这些值是,

上一次 519222175869357

现在时间 519222175923421

经过时间 54064

时间是 3545

所以你必须在这里更细化,并考虑使用 System.nanoTime()。

于 2012-08-02T04:39:14.837 回答