2016-11-30 1 views
0

여가 시간에 자바 시계를 만들려고 노력하고 재미있게 두 시간을 보냈지만 여전히 내 코드에 문제가 있습니다.자바 시계가 너무 빠름

현재 시간을 알려주지 만 너무 빨리 진행됩니다.

(복사하여 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

로 재설정 할 때 turnOn''에 대한'boolean'을 사용하지 왜 다음 초까지 계속 while 루프를 중지 while 루프 후 0으로 turnOn의 INT를 변경하여이 문제를 해결 한 ? – 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

나는 1

+1

내 대답을 확인하십시오. 매번 루프를 한 번만 실행하면 안됩니다. 루프가 필요한 것이 아닙니다. – xenteros

관련 문제