亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

日歷秒數在 while 循環中沒有增加

日歷秒數在 while 循環中沒有增加

海綿寶寶撒 2022-12-28 14:19:42
我試圖讓 while 循環在 5 秒半 (5.5) 后停止,所以我使用 Calendar 庫獲取分鐘的當前秒數,然后將 5.5 遞增到它上面。在該過程之后,它循環等待當前時間等于保存的變量我意識到秒數沒有增加……這是為什么?代碼:package me.fangs.td;import java.util.Calendar;public class Main {    public static void main(String[] args) {        Calendar calendar = Calendar.getInstance();        double timeout = calendar.get(Calendar.SECOND) + 5.5;        while((double) calendar.get(Calendar.SECOND) < timeout) {            System.out.println((double) calendar.get(Calendar.SECOND));            Thread.sleep(1000);        }    }}
查看完整描述

3 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

我根本不會使用 Calender 庫,而是使用System.currentTimeMillis()


這是一個在 5.5 秒后終止的 while 循環:


long end = System.currentTimeMillis() + 5500;

while (System.currentTimeMillis() < end) {

  //Do something

}

//Exit after 5.5 seconds

這個版本的優點是,您可以在循環運行時更改結束時間,從而更改循環運行的時間。


查看完整回答
反對 回復 2022-12-28
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

與其實現我自己的,我更喜歡/使用Timer它是一種線程工具,可以在后臺線程中安排任務以供將來執行。像,


Timer t = new Timer();

TimerTask task = new TimerTask() {

    @Override

    public void run() {

        System.out.println("Five seconds");

    }

};

t.schedule(task, TimeUnit.SECONDS.toMillis(5) + 500); // 5.5 seconds.


查看完整回答
反對 回復 2022-12-28
?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

java.time

VoroX的回答是正確的。但是使用 java.time 使它更加優雅和自我記錄。


我們通過循環調用Instant.now每次以捕獲新的當前時間。日期時間對象不會自動更新。它們是那一刻的快照,凍結了。在每種情況下詢問您何時需要當前時間。


Duration wait = Duration.ofSeconds( 5 ).plusMillis( 500 ) ;  // 5.5 seconds.

Instant now = Instant.now() ;

Instant stop = now.plus( d ) ;


while( Instant.now().isBefore( stop ) ) 

{

   // Do some task. 

在實際工作中,我還會添加一個檢查,stop.isAfter( start )以防 Duration 被編輯為負值。


查看完整回答
反對 回復 2022-12-28
  • 3 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號