Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026

    comparare oggetti in java

    Salve.
    Sto cercando di comparare oggetti, nel mio caso dei valori numerici interi.
    codice:
    public int compareTo (Studente otherObject)
    {
    return matricola.compareTo(otherObject.getMatricola ());
    }
    Mi da errore che non può evocare il compareTo () su tipi primitivi.
    Come posso fare?
    Grazie
    P.S.: per il nome ed il cognome dello studente funziona

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Hai sostanzialmente due modi:

    1 - il confronto lo fai con Integer e non con int
    2 - fai un giochetto di questo tipo:

    return matricola - otherObject.getMatricola();


    Questo rispetta il contratto di compareTo restituendo
    - un numero > 0 se matricola > altraMatricola
    - un numero < 0 se matricola < altraMatricola
    - 0 se sono uguali

    Consiglio quest'ultimo modo

    edit

    Il metodo compareTo, essendo un override, annotalo con @Override (java 1.6+)



    ps: sezione sbagliata
    Ultima modifica di Alex'87; 24-08-2014 a 10:33
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Grazie funziona bene.
    Però adesso ho tre metodi compareTo nella stessa classe: uno per il nome, uno per il cognome ed uno per la matricola.
    Due su tre li ho commentati per testarne il codice di ogni metodo, ma se li voglio tutti e tre disponibili che approccio più corretto dovrei usare?
    Ereditarli in un'altra sottoclasse, oppure, creare una classe statica per ogni metodo?

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Spiega meglio cosa devi fare. Nulla ti vieta di avere un'unico compareTo in cui confronti contemporaneamente nome, cognome e matricola...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Si mi interessa un compareTo che possa comparare più tipi di dati.
    Potresti spiegare o postare il codice.
    Grazie
    P.S.: ho tentato con mettere degli if ma non funziona.

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    "non funziona" cosa vuol dire?



    Scegli la priorità dell'ordinamento e fai confronti a catena.

    Ad esempio, se vuoi ordinare per cognome, nome e matricola basta fare una cosa del genere dentro il tuo compareTo:

    codice:
    int cmp;
    
    cmp = cognome.compareTo(altroCognome);
    if (cmp == 0) {
        cmp = nome.compareTo(altroNome);
    
        if (cmp == 0) {
            cmp = matricola - altraMatricola;
        }
    }  
    
    return cmp;
    Confronti i cognomi: se sono uguali passi a confrontare i nomi e cosi via...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Oppure usi il compare invece del compareTo, e ti crei una serie di comparatori

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.