2016-09-26 3 views
1

Das Programm läuft 100 Mal und druckt die einzigartigen Elemente aus 140 Ganzzahlen aus.Wie kann ich die Gesamtzahl der Vergleiche erhalten, nachdem die 100 Schleifen beendet wurden?

Da zwei Ganzzahlen miteinander verglichen werden müssen, um festzustellen, ob sie eindeutig sind oder nicht, wie kann ich die Gesamtzahl der Vergleiche ausdrucken?

Hier ist mein Code:

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

Ihr Code nicht ganz das tun, was Sie denken, es tut. Es erzeugt tatsächlich 14000 ganze Zahlen aus 140 verschiedenen Bereichen (nur 0, dann 0 oder 1, dann 0, 1 oder 2 usw.). –

+0

ja seine technisch 14000 Ganzzahlen, aber es ist 100 Sätze von Arrays mit 140 Elementen (minus die Duplikate) in jedem Array. Es war in Ordnung, als ich es lief. –

+0

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

Antwort

4

Eine Möglichkeit, die Anzahl der Vergleich zu zählen ist Ihre eigene Comparator<Integer> Instanz an den Konstruktor von TreeSet passieren, anstatt den parameterlosen Konstruktor verwenden (was auf dem compareTo Verfahren beruht Integer).

Auf diese Weise implementieren Sie die Methode compare selbst und können eine Zählung erhöhen, wenn sie aufgerufen wird.

Zum Beispiel:

... 

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);   
    } 
} 

Wie von David Wallace erwähnt, sollten Sie wahrscheinlich Ihre Zufallszahl-Erzeugungslogik beheben:

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

ah, danke! und ich werde sicher sein, meinen Zufallsgenerator zu reparieren –

Verwandte Themen