我在Java import java.util。*;
中有这个程序public class Euclid {
private static final String EXCEPTION_MSG =
"Invalid value (%d); only positive integers are allowed. ";
public static int getGcd( int a, int b)
{
if (a < 0)
{
throw new IllegalArgumentException(String.format(EXCEPTION_MSG, a));
}
else
if (b < 0)
{
throw new IllegalArgumentException(String.format(EXCEPTION_MSG, b));
}
while (b != 0)
{
if (a > b)
{
a = a - b;
}
else
{
b = b - a;
}
}
return a;
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class EuclidGui
{
private static final String PROMPT_A = "#1";
private static final String PROMPT_B = "#2";
private static final String BUTTON_TEXT = "Get GCD >>";
private static final String EXCEPTION_TITLE = "Input Exception";
private static final String INSTRUCTIONS = "Type to integer and press 'Get GCD'";
private static final String DIALOG_TITLE = "Euclid's Algorithm";
private static final int FIELD_WIDTH = 6;
public static void main (String[] args)
{
final JTextField valueA = new JTextField (FIELD_WIDTH);
final JTextField valueB = new JTextField (FIELD_WIDTH);
final JTextField valueGcd = new JTextField (FIELD_WIDTH);
JLabel labelA = new JLabel(PROMPT_A);
JLabel labelB = new JLabel(PROMPT_B);
JButton computeButton = new JButton(BUTTON_TEXT);
Object[] options = new Object[] {labelA, valueA, labelB, valueB, computeButton, valueGcd};
valueGcd.setEditable (false);
computeButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{ try
{
int a = Integer.parseInt(valueA.getText());
int b = Integer.parseInt(valueB.getText());
int gcd = Euclid.getGcd(a , b);
valueGcd.setText(Integer.toString(gcd));
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null, e.getMessage(), EXCEPTION_TITLE, JOptionPane.ERROR_MESSAGE);
}
}
});
JOptionPane.showOptionDialog(null, INSTRUCTIONS, DIALOG_TITLE, JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE,
null, options, null);
}
}
我想在其上添加计算时间代码,但我不知道如何使用,以及我使用的正确代码是什么。如果有任何想法,请帮助我。
答案 0 :(得分:2)
System.currentTimeMillis()可以解决问题:
long start = System.currentTimeMillis();
// do stuff
long timeTaken = System.currentTimeMillis() - start;
答案 1 :(得分:1)
单次拨打getGcd
的时间可能会花费很少的时间,因此您很难准确可靠地测量它。
System.currentTimeMillis()
方法将为您提供以毫秒为单位的挂钟时间。但是,毫秒时钟的粒度可能太粗糙。 (阅读javadoc!)。
System.nanoTime()
方法给出系统时间(如javadoc所说)“纳秒级精度,但不一定是纳秒精度。”。
在具有某些操作系统的多核计算机上,nanoTime()
也存在问题。例如,我听说不同的核心可以有独立的纳米时钟,它们可以相互漂移。这可能导致System.nanoTime()
返回非单调的值;例如如果操作系统重新安排当前线程在两个nanoTime()
个呼叫之间的不同核心上运行。
如果我这样做,我会将getGcd()
的调用放入一个循环,运行10,000或100,000次,测量循环的时间,并将测量的时间除以相关因子。 / p>