Question

J'ai ce programme java qui calcule le temps que la personne a pris pour répondre à la boîte de dialogue de confirmation. Mais il semble que les deux time1 et le temps 2 obtient la même valeur. Qu'ai-je mal fait ici:

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


        }

    }
Était-ce utile?

La solution

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


    }

}

Autres conseils

Pourquoi ne pas utiliser directement System.currentTimeMillis ()? par exemple:

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

CodegistCRest est juste. mais de toute façon dans votre cas, vous obtiendrez le même ou presque les mêmes valeurs. Les ordinateurs modernes sont très rapides, mais la résolution de temps que vous obtenez de calendrier et currentTimeMillis () est millisecondes. informatiques tout invoque votre programme pendant moins de 1 ms.

Dans la vraie vie, vous n'avez pas besoin de tout cela. Vous devez dire:

long before = System.currentTimeMillis();

lorsque vous affichez la boîte de dialogue et

long after = System.currentTimeMillis();

en tant que partie d'action qui est appelée lorsque l'utilisateur appuie sur le bouton. Ensuite, dire

time = after - before;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top