2012-02-11 2 views
1

Mon programme nécessite que le résultat de l'intérieur d'une boucle soit affiché ou sorti avec des intervalles de temps de 1000ms. Est-il possible de mettre le code de la minuterie:Minuterie dans une boucle?

int delay2= 1000; 
    final Timer timer2 = new Timer(); 
      timer2.schedule(new TimerTask(){ 
    public void run(){} 

     },delay2, 1000); 

l'intérieur d'une boucle pour imprimer une réponse qui est:

System.out.println("dec2  "+deck2[g]); 
     System.out.println("dec1  "+deck1[g]); 

entre les intervalles de temps de 1000ms?

Merci d'avoir lu.

EDIT: Cela fonctionnera-t-il?

final Timer timer2 = new Timer(); 
     timer2.schedule(new TimerTask(){ 
public void run(){ 
System.out.println("COUNT"+count); 
for(int g = 0;g<e+1;g++) 
{ 

    System.out.println("dec2  "+deck2[g]); 
    System.out.println("dec1  "+deck1[g]); 

} 
} 
    },delay2, 1000); 

EDIT2: Ou Ceci?

long t = new Date().getTime(); // time now in millies 
do { 
    for(g = 0;g<e+1;g++) 
    { 
    final long now = new Date().getTime(); 
    if(now - t >= 1000) { 
System.out.println("dec2  "+deck2[g]); 
System.out.println("dec1  "+deck1[g]); 
     t = new Date().getTime(); // reset reference time 
    } 
} 
count--; 
} while(count==0); 
+0

double possible de [Pour boucle à l'intérieur d'une minuterie ne fonctionne pas] (http://stackoverflow.com/questions/9238830/for-loop-inside-a-timer-not-working) –

Répondre

1

Si vous ne me dérange pas l'impact de la performance que vous pouvez faire quelque chose comme ça.

long t = new Date().getTime(); // time now in millies 
do { 
    // do something here 
    // ... 
    final long now = new Date().getTime(); 
    if(now - t >= 1000) { 
     // do your logging 
     // ... 
     t = new Date().getTime(); // reset reference time 
    } 
} while(someCondition); 
+0

long t = new Date(). GetTime(); // temps maintenant en millièmes do { pour (g = 0; g = 1000) { t = new Date(). GetTime(); // réinitialisation de l'heure de référence } count--; } while (nombre == 0); J'ai essayé ceci mais n'ai pas fonctionné. Pouvez-vous dire ce que j'ai fait mal? .. (im apprenant encore java ..) .. –

+0

Que voulez-vous dire en ne travaillant pas? Les boucles se terminent-elles (quelles sont les valeurs initiales de g et de count)? – Stefan

+0

La valeur initiale de g et count est zero.count est incrémenté par une autre partie du programme jusqu'à ce qu'une valeur soit atteinte. EDIT: Je n'ai pas compris le terme "logging" que vouliez-vous dire là? .. La partie où il est dit " fais quelque chose ici "j'ai inséré la boucle et la boucle se termine après la condition if (now-t> = 1000). Les instructions system.out.println sont à l'intérieur du if (now-t> = 1000) .Que fais-je mal ici? ... –

0

Non, vous pouvez faire « g » et variable d'instance et de l'utiliser dans la méthode run() du temps pour faire ce que vous voulez.

Quelque chose comme:

private int g = 0; 

private startTimer() 
{ 
    final Timer timer = new Timer(); 

    timer.schedule(new TimerTask(){ 
     public void run(){ 
      g++;     // Incrementing the counter. 
      System.out.println("dec2  "+deck2[g]); 
      System.out.println("dec1  "+deck1[g]); 

      // Stop the timer when done. 
      if (g >= e + 1) timer.cancel(); 
     } 
    }, delay, 1000); 
} 
+0

Uhh i don » Je t'ai. Pouvez-vous s'il vous plaît expliquer? –