Мне нужна помощь в моей программе - PullRequest
0 голосов
/ 06 декабря 2010

У меня есть эта программа на 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);
}      
}    

и я хочу добавить к нему код времени расчета, но я понятия не имею, как и какой правильный код я использую. Пожалуйста, помогите мне, если у кого-то есть идея.

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

System.currentTimeMillis () поможет:

long start = System.currentTimeMillis();
// do stuff
long timeTaken = System.currentTimeMillis() - start;
1 голос
/ 06 декабря 2010

Скорее всего, один вызов getGcd займет так мало времени, что вам будет трудно измерить его надежно и точно.

Метод System.currentTimeMillis() даст вамвремя настенных часов измеряется в миллисекундах.Тем не менее, зернистость миллисекундных часов, вероятно, слишком грубая.(Прочитайте javadoc!).

Метод System.nanoTime() дает системное время с (как говорит javadoc) «точностью до наносекунды, но не обязательно с точностью до наносекунды». .

Есть также проблемы с nanoTime() на многоядерных машинах с некоторыми операционными системами.Например, я слышал, что разные ядра могут иметь независимые часы nanoTime, которые могут дрейфовать относительно друг друга.Это может привести к System.nanoTime() возвращению немонотонных значений;например, если текущий поток перенесен операционной системой на другое ядро ​​между двумя вызовами nanoTime().

Если бы я делал это, я бы поместил вызовы к getGcd() в цикл, который выполнялся10 000 или 100 000 раз, измерьте время цикла и разделите измеренное время на соответствующий коэффициент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...