2014-09-27 144 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;