2014-09-27 148 views
-2

我必须编写一个程序来比较两个不同列表的运行时间,一个是基于数组的,另一个是链接列表。我必须以二十个不同的长度运行二十次,所以我做了一个for循环来为我做这个,它应该运行二十次,但只打印一件事,然后它让我的电脑非常慢,它说这个过程还在我的IDE上运行了一段时间。继承人的代码,问你是否需要更多,但这应该是足够的。我想知道为什么for循环只打印一个东西,之后它说仍然在运行。这个for循环有什么问题,它打印什么?

public class Foo4 { 
    public static void main(String[] args) { 
     int max = Integer.MAX_VALUE; 

     int diff = max/20; 
     int holder = 1; 
     long test1time; 
     long test2time; 
     StopWatch timer = new StopWatch(); 
     int t; 

     for (t = 0; t < 20; t++) { 
     AList test1 = new AList(); 
     Slist test2 = new Slist(); 

     for (int j = 0; j < holder; j++) { 
      test1.addFirst("the"); 
      test2.addFirst("thee"); 
     } 

     timer.reset(); 
     timer.start(); 
     test1.getLast(); 
     timer.stop(); 
     test1time = timer.getElapsedTime(); 
     timer.reset(); 
     timer.start(); 
     test2.getLast(); 
     timer.stop(); 
     test2time = timer.getElapsedTime(); 
     System.out.println(test1time + " : " + test2time); 
     holder += diff; 
     } 
    } 
} 
+2

修复您的格式。 – MarsAtomic 2014-09-27 18:59:41

+2

如果您花时间和精力来格式化您的代码,其他人会更乐意投入时间和精力来帮助您。你目前的格式非常糟糕,很难阅读,因为你的代码块没有缩进,其他块看起来是随机缩进的,叠加的花括号... – 2014-09-27 19:00:42

+0

我可以得到一些不太模糊的东西吗?无论如何,我会将其格式化,这使得它更容易,但我不明白格式化的问题?新人应该如何知道如何格式化以使其他人更容易? – trosy 2014-09-27 19:00:57

回答

3
 int max = Integer.MAX_VALUE; 

     int diff = max/20; 
     int holder = 1; 
... 
     for (t = 0; t < 20; t++) { 
      AList test1 = new AList(); 
      Slist test2 = new Slist(); 

      for (int j = 0; j < holder; j++) { 
       test1.addFirst("the"); 
       test2.addFirst("thee"); 
      } 
... 
      holder+=diff 
     } 

你一定要明白,你的第二次迭代(当t == 1您添加超过1亿的字符串到你的列表呢?这可能需要一些时间,更何况,你的程序可能会挂起/失败的原因以内存限制

+0

教授说,我们必须从最大尺寸中以均匀的间隔进行 – trosy 2014-09-27 19:16:02

+1

为了简单起见,假设测试的最大尺寸设置为50.如果它起作用,那么您可以进一步增加它。但现在只是为了测试你的逻辑/流量,只保留这个值。 – Mr37037 2014-09-27 19:19:39

+0

好吧,我这样做了,我把它设置为10000,并且系统为循环的每个部分输出全零,那么所有这些运行都没有办法达到零毫秒? – trosy 2014-09-27 19:23:10

0

好吧我试着运行你的代码,我得到了相同的输出,每次都说0:0我不知道你在使用哪个IDE,但我用eclipse然后调试你的代码。在timer.reset()行设置断点,然后等待几秒钟,然后按F6移至下一行,然后移至下一步,间隔为每个F6印刷机2到3秒钟。然后在最后它打印一些值,如:2711:3559.

现在的问题是,你的代码执行得如此之快,以至于它得到的开始和结束时间相同,但是当你调试它并检查值时,它会显示一些结果不是零。

 timer.reset();//set a breakpoint over here. When debugger comes on this line press F6 
    timer.start();//Wait for 3 seconds over here and then press F6. 
    test1.getLast();//Now at each below line wait for 3 seconds and then press F6 
    timer.stop(); 
    test1time = timer.getElapsedTime(); 
    timer.reset(); 
    timer.start(); 
    test2.getLast(); 
    timer.stop(); 
    test2time = timer.getElapsedTime(); 
    System.out.println(test1time + " : " + test2time); 
    holder += diff;