2012-03-27 45 views
0

我創建了一個數組,然後以5個爲一組打印。然後,我想能夠通過5搜索數組來查看是否有任何重複。我試過了,但我只能想到一種方法來搜索每個值不是五。如果任何人都能指引我走向正確的方向,那會很棒。謝謝。如何在單個數組中找到長度爲5的副本。 Java

public class findPat { 
     static int arr [] = new int [10]; 
     static int st = 1; 
     static int end = 56; 
     static double t1; 
     static double t2; 

     public static void main(String[] args){ 

      t1=System.currentTimeMillis(); 
      for(int n=0; n<100; n++){ 
       for (int i=0; i<arr.length; i++) 
        arr[i]= (int) (Math.random()* (end-st +1)) +st; 

       for (int i=0; i<5; i++){ 

        if (i%5==0) 
         System.out.println(); 
         System.out.print("\t" + arr[i]);} 
        } 
      t2=System.currentTimeMillis(); 
      System.out.println(); 
      System.out.println(); 
      System.out.println("\t" + "Total run time is " + ((t2-t1)) + "ms"); 

      } 
     } 

控制檯看起來是這樣的:

18 22 42 14 38 
    2 2 14 9 8 
    6 29 38 37 33 
    6 41 41 27 7 
    20 41 38 11 50 
    16 17 41 21 19 
    40 33 9 10 7 
    12 54 10 30 36 

但每一行都是在同一陣列中,但在同一時間只是打印5。 控制檯將不僅僅是這幾行。我希望能夠搜索數組並檢查每一行,看看它有多少次出現。

+0

你是什麼意思「由5搜索」? – 2012-03-27 16:23:29

+0

我不明白這個問題。請提供一個示例輸入和一個示例輸出來澄清問題。 – amit 2012-03-27 16:23:40

+0

有很多方法,看看這個主題: http://stackoverflow.com/questions/3951547/java-array-finding-duplicates – 2012-03-27 16:29:18

回答

1

你可以使用Hashtable來實現這個功能。使用你的代碼作爲基礎,我編寫了一個示例實現,但不知道你想要做什麼,我不能判斷這是否是你正在尋找的東西。

import java.util.Hashtable; 

public class findPat { 
    static final int COUNT = 100; 

    static Hashtable<String, Integer> compareSet = new Hashtable<String, Integer>(); 
    static String groupInteger = ""; 
    static int arr [] = new int [5]; 
    static int st = 1; 
    static int end = 56; 
    static double t1; 
    static double t2; 

    public static void main(String[] args) { 
     t1=System.currentTimeMillis(); 
     for(int n = 0; n < COUNT; n++){ 
      for (int i = 0; i < arr.length; i++) { 
       arr[i] = (int) (Math.random()* (end - st + 1)) + st; 

      } 
      for (int i = 1; i <= 5; i++) { 
       groupInteger += arr[i-1]; 
       System.out.print("\t" + arr[i-1]); 
       if (i % 5 == 0) { 
        System.out.println(); 
        if (compareSet.containsKey(groupInteger)) { 
         System.out.println("duplicate found"); 
         int currentCount = compareSet.get(groupInteger); 
         compareSet.put(groupInteger, currentCount + 1); 
        } else { 
         compareSet.put(groupInteger, 1);       
        } 
        groupInteger = ""; 
       } 

      } 
     } 
     t2=System.currentTimeMillis(); 
     System.out.println(); 
     System.out.println(); 
     System.out.println("\t" + "Total run time is " + ((t2 - t1)) + "ms"); 
    } 
} 

此代碼將其添加(創建一個鍵值是每個組具有相同的順序相同的值相同跟蹤的獨特組隨機數,在連接字符串注意到了這一問題)。

您的代碼在我的系統上運行了13秒,我的系統需要17秒。現在,如果運行時非常重要,那麼您可能需要研究散列技術。但我不確定你是否能夠削減很多,因爲你將不得不添加一些額外的代碼,這將需要額外的時間。

+0

這不是100%,但它確實使我在正確的方向,非常感謝。 – 2012-03-27 17:35:50

+0

我運行的程序,但是,當我打印compareSet看看哪些值是重複的,我得到這個{3623955 = 1,31471043 = 1,191644650 = 1,2774351 = 1,34492846 = 1,431540317 = 1,5 = 1,3649244028 = 1,748465055 = 1,1141473319 = 1} 但數字與數組中的內容不匹配,它從數組中的任意點開始。 – 2012-03-27 17:59:36

+0

對不起,我的錯誤是,我假設你的代碼在數組中的每個第五項之後打印,但是由於只有當數字可以被5分割並且第五元素具有索引4時i%5爲0,它存儲了第一個元素後面跟着集合元素5個位置(第2至第6,第7至第11,...)。我編輯了我的代碼。 – len 2012-03-27 19:17:16