簡體   English   中英

如何使所有主要方法顯示執行時間

[英]How do I make all my main methods show execution time

自從我用Java編程以來已經有一段時間了,但是我似乎無法解決它,所以對於可能做過的任何愚蠢的事,我事先表示歉意。

我目前正在解決Java中的數學問題列表。 我為每個問題創建一個名為ProblemX的新類。 我希望每個班級打印執行的持續時間。 盡管我會使用一些繼承,但不必在每個單獨的類中進行編程,但這就是我遇到的問題。

Public abstract class Problem{

 public static void main(String[]args){
   Problem p = new Problem();
   long startTime = System.nanoTime();
   p.solve();
   long endTime = System.nanoTime();
   System.out.println("Execution time: " + (endTime - startTime) + " nanoseconds");
 }

abstract void solve();

}

這是行不通的,因為我無法在抽象類中創建Problem的實例。 我不能使用Solveable接口,因為當時Problem必須定義'solve'。

顯然,我在這里缺少任何東西,因此如果有人可以幫助,將不勝感激。

怎么樣:

public abstract void solve();

public void solveProblem() {
    startTime();
    solve();
    endTime();
    System.out.println(timeTaken);
}

然后只需覆蓋solve並調用solveProblem。

你可以做類似的事情

public abstract class Problem{

    long startTime;

    long endTime;

    public void startTime(){
    startTime = System.nanoTime();
    }

    public void endTime(){
    endTime = System.nanoTime();
    }

    public long measure(){
    return endTime - startTime;
    }

}

public class ProblemX extends Problem{

    public static void main(String[] a){
     ProblemX x = new ProblemX(); 
     x.startTime();
     //do your work
     x.endTime();
     System.out.println("time taken" + x.measure());
    }
}

大概是這樣嗎?

package com.stackoverflow;
public abstract class Problem {
    public static void main(String[] args) {
        Problem p = new Problem(){

            @java.lang.Override
            protected void doCalculation() {
                for (int i = 0; i < 1000; i++) {
                    System.out.println("Printing number... " + i);
                }
            }
        };
        p.solve();
        System.out.println("Execution time: " + p.getElapsedTime() + " nanoseconds");
    }

    private long startTime, endTime;
    private void doStartTime() {
        startTime = getSystemNanoTime();
    }
    private void doEndTime() {
        endTime = getSystemNanoTime();
    }
    private long getSystemNanoTime() {
        return System.nanoTime();
    }
    protected abstract void doCalculation();

    public void solve() {
        doStartTime();
        doCalculation();
        doEndTime();
    }
    public long getElapsedTime() {
        return endTime - startTime;
    }

}

假設您有一個ProblemX類,它覆蓋了Problem。 您應該在static main方法中更改以下行:

從:

問題p =新問題(){

@java.lang.Override
protected void doCalculation() {
    for (int i = 0; i < 1000; i++) {
        System.out.println("Printing number... " + i);
    }
}

};

至:

Problem p = new XProblem();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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