2016-11-30 62 views
0

試圖在業餘時間用java製作一個時鐘,有很多樂趣和兩個小時,但我仍然遇到了我的代碼問題。Java時鐘太快

它告訴我當前時間,但進展太快。

(複製並粘貼到一個IDE /編譯並運行它,你會看到)

誰能幫助初學者?

package clock; 

import java.util.Scanner; 
import java.util.Timer; 
import java.util.TimerTask; 

public class Clock { 


    public static void main(String[] args) { 

     int hour; 
     int minute; 
     int second; 
     Scanner keyb = new Scanner(System.in); 


     System.out.println("What hour is it?"); 
     hour = keyb.nextInt(); 
     System.out.println("What Minute is it?"); 
     minute = keyb.nextInt(); 
     second = 0; 
     Timer t = new Timer(); 
     t.schedule(new TimerTask() { 
      Scanner keyb = new Scanner(System.in); 
      int hour; 
      int minute; 
      int second; 
      int turnOn; 
      @Override 
      public void run() { 
       turnOn = 1; 
       while (turnOn != 0){ 
        System.out.println("Current time is:"+ hour +":"+minute+":"+second); 
        second ++; 
        if (second >= 59){ 
         minute ++; 
         second = 0; 
        } 
        else{ 

        } 
        if (minute >= 59){ 
         hour ++; 
         minute = 0; 
        } 
        else{ 

        } 
        if (hour >= 24){ 
         hour = 0; 
        } 

       } 
      } 

     }, 0, 1000); 
    } 

} 
+1

將停止while循環一直持續到下一秒爲什麼不使用'turnOn'一個'boolean'後改變所述開啓INT爲0解決了這個? – JonK

+0

嗨好主意,只是改變了! –

回答

0

有各種各樣的事情要考慮: (1)等待每圈1秒後。 (忽略循環中的處理時間) (2)在'else if'塊中放置分鐘和小時邏輯。 像這樣

import java.util.Scanner; 
import java.util.Timer; 
import java.util.TimerTask; 
import java.util.concurrent.TimeUnit; 

public class Clock { 

    public static void main(String[] args) { 

     int hour; 
     int minute; 
     int second; 
     Scanner keyb = new Scanner(System.in); 

     System.out.println("What hour is it?"); 
     hour = keyb.nextInt(); 
     System.out.println("What Minute is it?"); 
     minute = keyb.nextInt(); 
     second = 0; 
     Timer t = new Timer(); 
     t.schedule(new TimerTask() { 
      Scanner keyb = new Scanner(System.in); 
      int hour; 
      int minute; 
      int second; 
      int turnOn; 

      @Override 
      public void run() { 
       turnOn = 1; 
       while (turnOn != 0) { 
        System.out.println("Current time is:" + hour + ":" + minute 
          + ":" + second); 
        second++; 
        if (second >= 59) { 
         minute++; 
         second = 0; 
         if (minute >= 59) { 
          hour++; 
          minute = 0; 
          if (hour >= 24) { 
           hour = 0; 
          } 
         } 
        } 
        try { 
         TimeUnit.SECONDS.sleep(1); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 

     }, 0, 1000); 
    } 
} 
+0

不',0,1000)'每次它之間設置爲1秒? –

+0

它的確如此。這不是重點。查看我的答案以獲得解釋。 – xenteros

+0

好吧,運行它,看看輸出說是否比評論更強: – ManishKr

1

您已安排你的無限循環開始每一秒。 t.schedule(TimerTask, long, long)正確地從0開始,但是然後每秒運行您的運行方法。如果您在方法run的每次調用中增加秒數,這將是正確的。不幸的是,不是遞增一次,而是開始每次執行都會增加的無限循環。

Timer t = new Timer(); 
    t.schedule(new TimerTask() { 
     Scanner keyb = new Scanner(System.in); 
     int hour; 
     int minute; 
     int second; 
     boolean turnOn = true; 
     @Override 
     public void run() { 
//CHANGE HERE!!! \/ 
//You only want to increment seconds once in a call of run method. 
      if (turnOn){ 
       System.out.println("Current time is:"+ hour +":"+minute+":"+second); 
       second ++; 
       if (second >= 59){ 
        minute ++; 
        second = 0; 
       } 
       if (minute >= 59){ 
        hour ++; 
        minute = 0; 
       } 
       if (hour >= 24){ 
        hour = 0; 
       } 
      } 
     } 

    }, 0, 1000); 

是你在找什麼。

作爲一個方面的備註請記住,空的else塊是冗餘以及空行。你的代碼中不需要它們。更何況在StackOverflow上發佈它們是不合適的。你的例子應該是最小的。

+0

turnOn = 1?,turnOn是​​布爾值 – ManishKr

+0

@Manish沒有看到。事實並非如此 – xenteros

-1

我已經while循環,當它重置爲1

+1

檢查我的答案。每次只能運行一次循環。這不是什麼循環。 – xenteros