Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

'Εγραψα την παρακάτω κλάση με σκοπό να συγκρίνω αντικείμενα Vertex με σκοπό να sortάρω έναν πίνακα με τέτοια αντικείμενα με αύξουσα σειρά της τιμής getVertexDegree (η οποία δεν είναι πεδίο της κλάσης Vertex).

 

Ο κώδικας μεταγλωτίζεται κανονικά χωρίς λάθη, χωρίς errors, χωρίς κανένα πρόβλημα.

> class vDegreeComparator implements Comparator<Vertex>  {
   
 @Override
   public int compare(Vertex v1, Vertex v2) {
       int v1D=0;
       int v2D=0;
   
       try{
       v1D=getVertexDegree(v1);
       v2D=getVertexDegree(v2);
       
       
       }   
       
       catch(ArrayIndexOutOfBoundsException arrayIndexOutOfBoundsException){
          System.err.printf("\narrayindexOutOfBoundsException: %s\n", arrayIndexOutOfBoundsException);
       }
       catch(Exception exception){
       System.err.printf("\nException: %s\n", exception);
       }
       if (v1D>v2D) return 1;
       else
         if (v1D<v2D) return -1;
       return 0;
       
      
       }
 }
 

 

Στη συνέχεια γράφω μια μέθοδο για το sortάρισμα του πίνακα που με ενδιαφέρει.

 

>public void sort() throws Exception {

     Arrays.sort(vertices, new vDegreeComparator());
     ..................
}

Οταν εκτελώ το πρόγραμμα η μέθοδος sort() δίνει λανθασμένα αποτελέσματα, με λίγα λόγια ... δεν κάνει sort.

 

Υπάρχει κάποιο λάθος που δεν βλέπω?

Δημοσ.

ευχαριστώ για την άμεση απάντηση.

 

Εχω ελέγξει την getVertexDegree, δίνει τα προβλεπόμενα αποτελέσματα.

 

Βασικά είχα κάνει τη δουλειά που ήθελα υλοποιώντας την Comparable, αλλά ο καθηγητής μου με παρότρυνε να το υλοποιήσω με την comparator και τότε άρχισαν τα προβλήματα.

Δημοσ.

Για δοκίμασε λίγο να γράψεις την Compare με αυτόν τον τρόπο και δες αν φέρνει τα επιθυμητά αποτελέσματα.

 

>

public int Compare(Vertex v1,Vertex v2)
{
  int V1D = getVertexDegree(v1);
  int V2D = getVertexDegree(v2);

  //Etsi ta sortarei kata auksousa timi
  return V1D.CompareTo(V2D);

  // An thes na ta sortarei kata fthinousa timi
  // return V2D.CompareTo(V1D);

}

 

Για περαιτέρω βοήθεια δες λίγο εδώ

Δημοσ.

έβαλα μερικές println μέσα στην compare και διαπίστωσα οτι η getVertexDegree παρουσιάζει λανθασμένα αποτελέσματα (είχες δίκιο DirectX). Οταν τη χρησιμοποιώ έξω από την compare τότε δίνει σωστά αποτελέσματα. Δεν μπορώ να καταλάβω αυτή την ανώμαλη συμπεριφορά.

 

Επίσης να αναφέρω οτι έχω λύσει το πρόβλημα μου υλοποιώντας την κλάση Comparable, αλλά ο καθηγητής μου, μου ζήτησε υλοποίηση με Comparator.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...