2011-01-17 3 views
1

У меня есть эта java-программа, которая вычисляет время, которое человек взял, чтобы ответить на диалоговое окно подтверждения. Но кажется, что и time1, и time 2 получают одинаковое значение. Что я сделал неправильно здесь:java gregorian calendar timer

import javax.swing.JOptionPane; 
    import java.util.*; 

    public class DialogTimer{ 
     public static void main(String args[]){ 
      int time1, time2, milli1, milli2, sec1, sec2, timeDifference; 
      final int MILLISECSINSECOND =1000; 

      JOptionPane.showConfirmDialog(null, "Is stealing ever justified? "); 

      GregorianCalendar before=new GregorianCalendar(); 
       GregorianCalendar after= new GregorianCalendar(); 


      milli1=before.get(GregorianCalendar.MILLISECOND); 
      milli2=after.get(GregorianCalendar.MILLISECOND); 


      sec1=before.get(GregorianCalendar.SECOND); 
      sec2=after.get(GregorianCalendar.SECOND); 

      time1=MILLISECSINSECOND * sec1 + milli1; 
      time2=MILLISECSINSECOND * sec2 + milli2; 


      //timeDifference=time1 - time2; 
      System.out.println(time1); 
      System.out.println(time2); 


      //JOptionPane.showMessageDialog(null, "It took " + (time1 - time2) + " milliseconds for you to answer"); 


     } 

    } 

ответ

2
import javax.swing.JOptionPane; 
import java.util.*; 

public class DialogTimer{ 
    public static void main(String args[]){ 
     int time1, time2, milli1, milli2, sec1, sec2, timeDifference; 
     final int MILLISECSINSECOND =1000; 

     GregorianCalendar before=new GregorianCalendar(); 
     milli1=before.get(GregorianCalendar.MILLISECOND); 

     JOptionPane.showConfirmDialog(null, "Is stealing ever justified? "); 

     GregorianCalendar after= new GregorianCalendar(); 
     milli2=after.get(GregorianCalendar.MILLISECOND); 


     sec1=before.get(GregorianCalendar.SECOND); 
     sec2=after.get(GregorianCalendar.SECOND); 

     time1=MILLISECSINSECOND * sec1 + milli1; 
     time2=MILLISECSINSECOND * sec2 + milli2; 


     //timeDifference=time1 - time2; 
     System.out.println(time1); 
     System.out.println(time2); 


     //JOptionPane.showMessageDialog(null, "It took " + (time1 - time2) + " milliseconds for you to answer"); 


    } 

} 
4

Почему вы не используете непосредственно System.currentTimeMillis()? например:

long startAt = System.currentTimeMillis(); 
... your code ... 
long elapsed = System.currentTimeMillis() - startAt; 
1

CodegistCRest прав. но в любом случае в вашем случае вы получите одинаковые или почти одинаковые значения. Современные компьютеры очень быстрые, но временное разрешение, которое вы получаете от календаря, и currentTimeMillis() - миллисекунды. Компьютер вызывает всю вашу программу в течение менее 1 мс.

В реальной жизни вам не нужно все это. Вы должны сказать:

long before = System.currentTimeMillis();

, когда вы показываете диалог и

long after = System.currentTimeMillis();

как часть действия, которая вызывается, если пользователь нажал кнопку. Затем скажите

time = after - before;