2013-07-31 39 views
1

好的,所以我建立了一個時鐘,以相同的格式發送時間,格式爲日誌(小時),分鐘和秒鐘,但當我輸入時這運行。我主要得到NANs,有時甚至是無窮大(或負面的)。我有一種感覺,我正在使用的數字有問題(例如,也許它們太大或類似的東西)注意:currentTime是一個很長的日曆,日曆是日曆,小時,分鐘和秒鐘是雙打。時鐘變量也是JLabel。程序經過兩次迭代後,它總是切換到NAN。爪哇對數時鐘給出了可信的答案

this.timer.scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() { 
       new SwingWorker<Void, Void>() { 
        @Override 
        protected Void doInBackground() throws Exception { 
         currentTime = System.currentTimeMillis(); 
         calendar.setTime(new Date(currentTime)); 
         hour = Math.log10(hour); 
         minute = Math.log10(minute); 
         second = Math.log10(second); 
         System.out.println(hour + " " + minute + " " + second); 
         return null; 
        } 

        @Override 
        protected void done() { 

         clock.setText("<html><body><p>Log Time: " 
           + "Log<sub>10</sub>(" + hour + ") || " 
           + "Log<sub>10</sub>(" + minute + ") || " 
           + "Log<sub>10</sub>(" + second + ")</p></body></html>"); 
        } 
       }.execute(); 
      } 
     }, 0, 200); 

Pic1 Pic2

+1

爲什麼你發佈難以閱讀的深藍色的黑色截圖,而不是隻包括在您的文字張貼?在執行日誌操作之前,您執行了哪些診斷來檢查「小時」,「分鐘」和「秒」的值? –

+0

我使用調試器在給它們賦值的時候放置了一個斷點,而且它們似乎總是在跌落。 –

+0

嗯,是的,他們會這樣做,因爲你正在取前一個值的日誌,這是之前的值的日誌等 - 請參閱我的答案。 –

回答

3

此代碼不會做出很大的意義:

currentTime = System.currentTimeMillis(); 
calendar.setTime(new Date(currentTime)); 
hour = Math.log10(hour); 
minute = Math.log10(minute); 
second = Math.log10(second); 

你設定時間calendar - 但後來完全無視它。我希望你想要的東西,如:

currentTime = System.currentTimeMillis(); 
calendar.setTime(new Date(currentTime)); 
hour = Math.log10(calendar.get(Calendar.HOUR_OF_DAY)); 
minute = Math.log10(calendar.get(Calendar.MINUTE)); 
second = Math.log10(calendar.get(Calendar.SECOND)); 

編輯:由於在評論中指出,你還需要考慮你會做什麼時,小時,分鐘或秒爲0(這是非常不清楚爲什麼你'd 想要使用基於日誌的時鐘開始,說實話。)

+0

當字段爲0時,仍然會出現對數問題。 – kiheru

+0

@kiheru:良好的捕獲 - 將爲此編輯。 –