簡體   English   中英

我的程序需要幫助

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM