2016-09-26 3 views
1

Программа запускается 100 раз и распечатывает уникальные элементы из 140 целых чисел.Как получить общее количество сравнений после завершения 100 циклов?

Поскольку ему нужно сравнить два целых числа, чтобы определить, являются ли они уникальными или нет, как я могу распечатать общее количество сравнений?

Вот мой код:

public class UniqueElements { 
    public static void main(String[] args) { 
     // TODO code application logic here 
     Set<Integer> uniqueKeys = new TreeSet<Integer>(); 
     //Use TreeSet to eliminate all duplicate integers in the array 
     for (int runs = 0; runs <= 100; runs++) { //program loops 100 times 
      for (int numbers = 1; numbers <= 140; numbers++) { 
       //add 140 integers in array 
       Random rand = new Random(System.nanoTime()); 
       uniqueKeys.add(rand.nextInt(numbers)); 
       //make the 140 integers random, including duplicates 
      } 
      System.out.print("Unique Elements: " + uniqueKeys + "\n"); 
      //print unique elements in array 
     } 
    } 
} 
+1

Ваш код не совсем то, что вы думаете, что он делает. Он фактически генерирует 14000 целых чисел из 140 различных диапазонов (только 0, затем 0 или 1, затем 0, 1 или 2 и т. Д.). –

+0

Да, его технически 14000 целых чисел, но это 100 наборов массивов с 140 элементами (минус дубликаты) в каждом массиве. Это было прекрасно, когда я побежал. –

+0

'System.out.println (14000);' – shmosel

ответ

4

Один из способов подсчитать количество сравнения передать свой собственный Comparator<Integer> экземпляр конструктору TreeSet вместо того, чтобы использовать конструктор без параметров (который опирается на compareTo метод Integer).

Таким образом вы сами реализуете метод compare и сможете увеличивать счетчик каждый раз, когда он вызывается.

Например:

... 

Set<Integer> uniqueKeys = new TreeSet<Integer>(new MyComparator()); 

... 

public class MyComparator implements Comparator<Integer> 
{ 
    private int count = 0; 

    public int compare (Integer a, Integer b) 
    { 
     count++; 
     System.out.println(count); // instead of printing the counter each time 
            // this method is called, you can print it 
            // once at the end of your program 
     return Integer.compare(a,b);   
    } 
} 

Как отметил Дэвид Уоллес, вероятно, вы должны исправить случайную логику поколения номер:

Random rand = new Random(); // use a single Random generator 
int max = ...; 
for (int numbers = 1; numbers <= 140; numbers++) {  
    uniqueKeys.add(rand.nextInt(max)); // use the same range for all 
             // the random generated numbers 
} 
+0

ах, спасибо! и я обязательно исправлю свой генератор случайных чисел –

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