0

私が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();

}

抽象クラスで問題のインスタンスを作成できないため、これは機能しません。問題は「解決」を定義する必要があるため、解決可能なインターフェイスを使用できません。

明らかに私はここに何かが欠けているので、誰かがそれを助けることができれば大歓迎です。

4

3 に答える 3

1

どうですか:

public abstract void solve();

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

次に、solve をオーバーライドして、solveProblem を呼び出します。

于 2013-09-18T11:23:46.427 に答える
0

次のようなことができます

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());
    }
}
于 2013-09-18T10:51:54.180 に答える
0

もしかしてこういうこと?

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;
    }

}

Problem をオーバーライドする ProblemX クラスがあるとします。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();
于 2013-09-18T11:02:44.293 に答える