Java 计时器代码不工作

Java 计时器代码不工作,java,Java,计时器Java代码不工作 public interface IncDec { void increment(); void decrement(); } public class MyIncDec implements IncDec { private int x; public MyIncDec(int x) { this.x = x; } public void increment() { this.x++; } public void decrement() {

计时器Java代码不工作

public interface IncDec
{
 void increment();
 void decrement();
}
public class MyIncDec implements IncDec
{
 private int x;
 public MyIncDec(int x) {
  this.x = x;
}
 public void increment() {
  this.x++;
 }
 public void decrement() {
  this.x--;
 }
}
第1部分:实现一个类,该类可用于测量每次调用递增和递减方法所需的时间(在 毫秒)并打印出此信息。该类应该或多或少透明地适应IncDec接口的现有客户机

我的解决方案:

public class Test{
public static void main(String[] args){
MyIncDec mid = new MyIncDec(4);
long l1;
long l2;

l1 = Calendar.getInstance().getTimeInMillis();
mid.increment();
l2 = Calendar.getInstance().getTimeInMillis();
System.out.println(l2-l1);
}
}
我的解决方案给出的时间差为0。当我在调用'increment'后在n之前显示长值时,它们是相同的。为什么会这样


假设我必须为应用程序中的许多地方提供类似的东西(方法调用的计时)。一个想法是为所有不同的方法编写一个单独的计时器类。是否有人有其他优化的想法来更方便地获取计时?

首先,您的时差为0,因为运行它可能需要不到1毫秒的时间。尝试在
increment
方法中添加
线程。sleep(50)
,查看是否有更改

 public void increment() {
  try { Thread.sleep(50); } catch (InterruptedException e) { }
  this.x++;
 }
其次,你的家庭作业可能希望你在课堂上使用
IncDec
接口计算你的时间。所以要考虑到这一点。一定要了解接口是什么,它们用于什么,更重要的是,它们是如何使用的

祝你好运

  • 我相信你的代码是有效的。你必须感谢现代计算机:它们速度非常快。如果希望看到差异写入循环0..1000000,而不是单个调用
    mid.increment()
    。或者,测量时间以纳秒为单位
  • 如果不是练习,而是真正的任务,请使用java profiler。有很多免费的和商业的分析器。此工具将为您提供最佳信息
    我认为你的作业是建议你利用

    我不会给出完整的解决方案,但这里有一个提示:

    public class MyIncDecProxy implements IncDec{
    
        MyIncDec incDec;
    
        public MyIncDecProxy(int x){
            //Initialise incDec
        }
    
        public void increment() {
            // Wrap the method of incDec implementing your timer
        }
    
        public void decrement() {
            //ditto
        }
    
    }
    

    然后,您将使用MyIncDecProxy类而不是MyIncDec

    为什么您希望方法调用花费整整毫秒的时间
    System.nanoTime
    更精确,但没有那么精确。+1:关于如何提问家庭作业问题的一个很好的例子!:)到目前为止,你还没有接受任何问题的答案。你是新来的,所以也许你不知道这意味着什么。常见问题解答说:当您决定哪个答案对您最有帮助时,单击答案左侧的复选框大纲,将其标记为已接受的答案。这让其他人知道你的问题得到了很好的答案。这样做是有帮助的,因为它向其他人表明你从社区中获得了价值。(如果你不这样做,人们通常会礼貌地要求你回去接受更多问题的答案!)你为什么要删除这个问题?如果你想删除它,请删除它,但不要清空它。我再说一遍……如果你想删除这个问题,请删除它。但不要留下肤浅的问题。