FrAcTaL-gR Δημοσ. 11 Ιουνίου 2012 Δημοσ. 11 Ιουνίου 2012 'Εγραψα την παρακάτω κλάση με σκοπό να συγκρίνω αντικείμενα 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. Υπάρχει κάποιο λάθος που δεν βλέπω?
Directx Δημοσ. 11 Ιουνίου 2012 Δημοσ. 11 Ιουνίου 2012 Στην θέση σου θα κοίταζα τις τιμές που παρέχει η getVertexDegree και με ποία λογική κάνω την σύγκριση τους.
FrAcTaL-gR Δημοσ. 11 Ιουνίου 2012 Μέλος Δημοσ. 11 Ιουνίου 2012 ευχαριστώ για την άμεση απάντηση. Εχω ελέγξει την getVertexDegree, δίνει τα προβλεπόμενα αποτελέσματα. Βασικά είχα κάνει τη δουλειά που ήθελα υλοποιώντας την Comparable, αλλά ο καθηγητής μου με παρότρυνε να το υλοποιήσω με την comparator και τότε άρχισαν τα προβλήματα.
Kaka7 Δημοσ. 12 Ιουνίου 2012 Δημοσ. 12 Ιουνίου 2012 Για δοκίμασε λίγο να γράψεις την 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); } Για περαιτέρω βοήθεια δες λίγο εδώ
FrAcTaL-gR Δημοσ. 12 Ιουνίου 2012 Μέλος Δημοσ. 12 Ιουνίου 2012 έβαλα μερικές println μέσα στην compare και διαπίστωσα οτι η getVertexDegree παρουσιάζει λανθασμένα αποτελέσματα (είχες δίκιο DirectX). Οταν τη χρησιμοποιώ έξω από την compare τότε δίνει σωστά αποτελέσματα. Δεν μπορώ να καταλάβω αυτή την ανώμαλη συμπεριφορά. Επίσης να αναφέρω οτι έχω λύσει το πρόβλημα μου υλοποιώντας την κλάση Comparable, αλλά ο καθηγητής μου, μου ζήτησε υλοποίηση με Comparator.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα