这个for循环有什么问题?它打印的是什么?

时间:2014-09-27 18:57:40

标签: java for-loop

我必须编写一个程序来比较两个不同列表的运行时间,一个是基于数组的,另一个是链表。我必须以二十种不同的长度运行它二十次,所以我做了一个for循环为我做这个,它应该运行二十次,但只打印出一个东西,然后它使我的电脑非常慢,它说这个过程还在我的IDE上运行了一段时间。下面是代码,询问您是否需要更多代码,但这应该足够了。我想知道为什么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 个答案:

答案 0 :(得分: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亿个字符串时?这可能需要一些时间,更不用说你的程序可能由于内存限制而挂起/失败。

答案 1 :(得分: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;