2012-03-27 2 views
-1

Можно создать дубликат:
How to find a duplicate of length 5 in a single array. JavaПоиск повторяющихся значений в массиве. Java

Я пытаюсь увидеть, если есть какие-либо дубликаты в массиве.

import java.util.Hashtable; 

public class test { 
    static final int COUNT = 10; 

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

    static int ctr = 0; 

    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] = (long) ((Math.random() * (end - st + 1)) + st); 

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

        } else { 
         compareSet.put(groupInteger, 1); 
        } 
        groupInteger = ""; 
       } 
       System.out.print(arr[i]); 
      } 
     } 
     t2 = System.currentTimeMillis(); 
     System.out.println(); 
     System.out.println(); 
     System.out.println("\t" + "Total run time is " + ((t2 - t1)) + "ms"); 
     System.out.println(compareSet); 
    } 
} 

консоль:

12 23 8 44 23 
28 13 39 49 53 
37 40 16 53 48 
6 45 14 52 20 
32 4 41 10 38 
38 29 25 21 13 
16 34 45 26 11 
22 33 54 21 10 
40 34 53 37 50 
20 26 48 32 51 

Я хочу, чтобы иметь возможность проверить, если есть повторяющиеся строки. Мне кажется, что этот код не подходит для правильной работы. Пожалуйста, дайте мне знать, если вы что-то увидите! Спасибо

+0

Ну нет повторяющихся строк в вашем выводе будут там? – talnicolas

+0

Вы хоть понимаете код, который он вам дал? http://stackoverflow.com/questions/9893580/how-to-find-a-duplicate-of-length-5-in-a-single-array-java – talnicolas

+0

Я понимаю, массив генерируется случайным образом с номерами между 1 -56 каждый раз, когда я запускаю программу, я получаю разные значения. и я печатаю около 100 000 тысяч строк. Я хочу сказать, сколько раз есть дубликат. –

ответ

1

Вы используете несоответствующие классы для этого, если вы хотите, чтобы найти «любые» дубликаты Используйте HashSet < Строки >

И ваш код полностью багги. Часть if-then должна быть после for, без if.

HashSet<String> compareSet = new HashSet<String>(); 
... 
groupInteger.empty(); 
for (int i = 0; i < 5; i++) { 
    groupInteger += arr[i] + " "; 
} 
System.out.println(groupInteger); 
if (compareSet.contains(groupInteger)) { 
    System.out.println("duplicate found "); 
} else { 
    compareSet.add(groupInteger); 
} 

И если вы хотите «считать» дубликатов, я хотел бы использовать HashMap

HashMap<String, Integer> compareSet = new HashMapt<String, Integer>(); 
... 
Integer act = compareSet.get(groupInteger); 
if (act != null) { 
    System.out.println("duplicate found "); 
    compareSet.put(groupInteger, act + 1); 
} else { 
    compareSet.put(groupInteger, 1); 
} 
+0

, который зафиксировал его, однако, он не показывает, сколько раз он появляется. –

Смежные вопросы