[英]I need help in my program
我在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);
}
}
我想在上面添加計算時間代碼,但我不知道該怎么做,我使用的正確代碼是什么。如果有人有一個Idea,請幫助我。
System.currentTimeMillis()將達到目的:
long start = System.currentTimeMillis();
// do stuff
long timeTaken = System.currentTimeMillis() - start;
一次調用getGcd
時間getGcd
會非常短,以至於難以可靠,准確地對其進行測量。
System.currentTimeMillis()
方法將為您提供掛鍾時間,以毫秒為單位。 但是,毫秒級時鍾的粒度可能太粗糙了。 (閱讀javadoc!)。
System.nanoTime()
方法給出的系統時間為(如javadoc所說) “納秒精度,但不一定是納秒精度”。 。
在具有某些操作系統的多核計算機上, nanoTime()
也存在問題。 例如,我聽說不同的內核可以具有獨立的nanoTime時鍾,它們可以彼此相對漂移。 這可能導致System.nanoTime()
返回非單調的值。 例如,如果操作系統將當前線程重新安排為在兩次nanoTime()
調用之間的不同內核上運行。
如果執行此操作,則將對getGcd()
的調用放入運行了10,000或100,000次的循環中,測量循環時間,然后將測得的時間除以相關因子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.