2014-04-11 2 views
-2

다음에 System.out.println(msg + ": " + count++);이 호출되고이 끝나는 이유는 무엇입니까?왜이 루프에서 if 문에있는 메시지는 루프가 끝난 후에 만 ​​호출자입니까?

예 : printWithDelay(2, "Hello"); 결과 : 카운트가 9 (~ 20 초)에 도달 한 후에 만 ​​System.out.println()의 모든 스택이 표시됩니다.

static void printWithDelay(int sec, String msg){ 
    int count = 0; 
    long eventTime = System.nanoTime() + ((long)Math.pow(10, 10)*sec); 
    while(count < 10){ 
     if(System.nanoTime() > eventTime){ 
      System.out.println(msg + ": " + count++); 
     } 
    } 
} 

원하는 결과 : 정확히 if 문이 참일 때 메시지가 표시됩니다.

+0

카운트 ++ 가 증가되지는 않습니다 – Arcaniel

+0

'System.nanoTime()> eventTime'이 true이면 print 문은 몇 초 안에 10 번 실행됩니다. while 루프에 실제로 있지만 너무 빠릅니다. – locoyou

+0

.... 뭐라 구요? 나는 당신이 원하는 것을 이해하기 어렵다고 느낍니다. tbh –

답변

1

그것은 루프의 종료 후 호출되지 않습니다,하지만 지금 당장 당신이 보이로 원하는 ... 블록의 경우 내부에 타이머를 재설정합니다. 당신은 출력이 점진적으로 나오기를 기대합니까? 그리고 일정한 간격으로 일정한 간격을두고 있습니까?

static void printWithDelay(int sec, String msg){ 
    int count = 0; 
    long eventTime = System.nanoTime() + ((long)Math.pow(10, 9)*sec); 
    while(count < 10){ 
     if(System.nanoTime() > eventTime){ 
      eventTime = System.nanoTime() + ((long)Math.pow(10, 9)*sec); 
      System.out.println(msg + ": " + count++); 
     } 
    } 
} 

그러나 바쁜 대기, 아주 좋은하지 않습니다 당신이 아마 대신 sleep를 사용해야 무슨 일을하는 것입니다 : 작동 할 수 있습니다이 비슷한 그렇다면.

이 문제가 아닌 경우 코드가 수행 할 것으로 예상되는 사항에 대해 조금 더 알려 주셔야합니다.

+0

lol - 같은 대답 –

1

너무 빠르거나 문제가있을 수 있습니다. 너무 빠르다고 생각합니다. 이를 확인하려면 Thread.sleep (1000)을 추가하십시오. 이제 결과를보십시오 ... 원하는 값으로 ms 값을 1000으로 변경하십시오. 그러나 문제가 다른 것을 만들기 전에 속도와 관련이 있는지 확인하기 위해 잠시 잠자기 상태로 만들 것을 제안합니다. 제안.

static void printWithDelay(int sec, String msg){ 
    int count = 0; 
    long eventTime = System.nanoTime() + ((long)Math.pow(10, 10)*sec); 
    while(count < 10){ 
     if(System.nanoTime() > eventTime){ 
      System.out.println(msg + ": " + count++); 
      Thread.sleep(1000); 
     } 
    } 
} 
1

대신 Math.pow (10,9)를 사용해보십시오. 그리고

static void printWithDelay(int sec, String msg){ 
    int count = 0; 
    long eventTime = System.nanoTime() + ((long)Math.pow(10, 9)*sec); 
    while(count < 10){ 
     if(System.nanoTime() > eventTime){ 
      System.out.println(msg + ": " + count++); 
      eventTime = System.nanoTime() + ((long)Math.pow(10, 9)*sec); 
     } 
    } 
} 
0

정말 버전이 작동하지 않는 이유에 대한 답변,하지만 당신이 할하려는 것처럼 을 모습의 간단한 버전 ...

static void printWithDelay(int sec, String msg){ 
    for(int count=0; count < 10; count++) { 
     Thread.sleep(sec*1000); 
     System.out.println(msg + ": " + count++); 
    } 
} 
관련 문제