Pregunta

Tengo este programa Java que calcula el tiempo que la persona que llevó a responder al cuadro de diálogo de confirmación. Pero parece que tanto tiempo 1 y 2 de tiempo obtiene el mismo valor. Lo que he hecho mal aquí:

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");


        }

    }
¿Fue útil?

Solución

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");


    }

}

Otros consejos

¿Por qué no usar directamente System.currentTimeMillis ()? por ejemplo:

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

CodegistCRest es correcto. pero de todos modos, en su caso obtendrá la casi los mismos valores iguales o. Las computadoras modernas son muy rápidos, pero la resolución de tiempo que recibe de calendario y currentTimeMillis () es milisegundos. invoca la computadora todo el programa durante menos de 1 ms.

En la vida real no es necesario todo esto. Usted tiene que decir:

long before = System.currentTimeMillis();

cuando se está mostrando el cuadro de diálogo y

long after = System.currentTimeMillis();

como parte de la acción que se llama cuando el usuario pulsa el botón. Entonces diga

time = after - before;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top