Java Gregorian Calendar Timer
-
11-10-2019 - |
質問
このJavaプログラムがあり、その人が[確認]ダイアログボックスに応答する時間を計算します。しかし、Time1とTime 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;
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");
}
}
解決
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");
}
}
他のヒント
直接system.currenttimemillis()を使用してみませんか?例えば:
long startAt = System.currentTimeMillis();
... your code ...
long elapsed = System.currentTimeMillis() - startAt;
CodeGistCrestは正しいです。しかし、とにかくあなたの場合、あなたは同じ値またはほぼ同じ値を得るでしょう。最新のコンピューターは非常に高速ですが、カレンダーとcurrentTimemillis()から得られる時間解像度はミリ秒です。コンピューターは、1ミリ秒未満でプログラム全体を呼び出します。
実生活では、これらすべてを必要としません。あなたが言う必要があります:
long before = System.currentTimeMillis();
ダイアログを表示しているとき
long after = System.currentTimeMillis();
ユーザーがボタンを押したときに呼び出されるアクションの一部として。次に、言います
time = after - before;
所属していません StackOverflow