1

人が確認ダイアログボックスに応答するのにかかった時間を計算するこのJavaプログラムがあります。しかし、time1 と time2 の両方が同じ値になるようです。ここで何が間違っていましたか:

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


        }

    }
4

3 に答える 3

4

System.currentTimeMillis() を直接使用しないのはなぜですか? 例えば:

long startAt = System.currentTimeMillis();
... your code ...
long elapsed = System.currentTimeMillis() - startAt;
于 2011-01-17T11:44:32.467 に答える
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");


    }

}
于 2011-01-17T11:49:52.887 に答える
1

CodegistCRest は正しいです。とにかく、あなたの場合、同じまたはほぼ同じ値が得られます。現代のコンピューターは非常に高速ですが、カレンダーと currentTimeMillis() から得られる時間分解能はミリ秒です。コンピューターは、1 ミリ秒未満でプログラム全体を呼び出します。

実生活では、これはすべて必要ありません。言わなくちゃいけない:

long before = System.currentTimeMillis();

ダイアログを表示しているときと

long after = System.currentTimeMillis();

ユーザーがボタンを押したときに呼び出されるアクションの一部として。それから言う

time = after - before;

于 2011-01-17T11:55:40.500 に答える