繁体   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