java timer calendario gregoriano
-
11-10-2019 - |
Domanda
ho questo programma Java che calcola il tempo che la persona che ha preso per rispondere alla finestra di dialogo Conferma. Ma sembra che sia time1 e il tempo 2 ottiene lo stesso valore. Che cosa ho sbagliato fatto qui:
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");
}
}
Soluzione
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");
}
}
Altri suggerimenti
Perché non si utilizza direttamente System.currentTimeMillis ()? ad esempio:
long startAt = System.currentTimeMillis();
... your code ...
long elapsed = System.currentTimeMillis() - startAt;
CodegistCRest è giusto. ma in ogni caso nel tuo caso si otterrà la quasi gli stessi valori uguali o. I computer moderni sono molto veloci, ma la risoluzione volta che si ottiene dal calendario e currentTimeMillis () è millisecondi. invoca computer tutto il tuo programma durante inferiore a 1 ms.
Nella vita reale non è necessario tutto questo. Devi dire:
long before = System.currentTimeMillis();
quando si sta mostrando la finestra di dialogo e
long after = System.currentTimeMillis();
come parte dell'azione che viene chiamata quando l'utente preme il pulsante. Poi dicono
time = after - before;