Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Fondamenti di architettura e programmazione
 
[Help] Interfaccia Comparable
Clicca QUI per vedere il messaggio nel forum
filipp8
Per il progetto di info bisogna fare le classi Seme e Valore implementando l'interfaccia Comparable, giusto?
quindi devo ridefinire il metodo compareTo(Object o), giusto?
come mai allora, quando vado a fare il cast sull'object per ottenere un int mi dice che l'object è un "inconvertible types"?

questo è il metodo che ho scritto:

public int compareTo(Object obj)
{
int n = (int) obj;
if (s < n) return -1;
else if (s > n) return 1;
else return 0;
}

nous

[url]http://java.sun.com/j2...Comparable.html

[/url]
http://java.sun.com/j2se/1.3/docs/a...ng/Integer.html

Cmq credo che sia perchè se vuoi un int da un Object devi convertirlo a Integer e poi utilizzare il metodo intValue.

filipp8
Sembra funzionare, mi è bastato sostituire l'(int) in (Integer)... grazie

mi stavo perdendo in un bicchier d'acqua...

0m4r
int e Integer non sono la stessa cosa

int è un tipo primitivo, mentre Integer è un oggetto

filipp8
si, ma se mi accetta int n = (int) obj;
alla fine n è per forza un intero, altrimenti non avrebbe compilato...
tu devi fare il progetto? come hai implementato l'interface Comparable?

nous
Cosa ti costa scrivere int n=((Integer)obj).intValue() ??
Inoltre prima di castarlo forzatamente ti conviene verificare che effettivamente Object sia un Integer, altrimenti un giorno nascerà un'eccezione meravigliosa e non si capirà facilmente perchè...oppure usa i meravigliosi blocchi try{}catch{} che fanno sempre bene ;)

filipp8
si, scusa, nel messaggio prima volevo scrivere int n = (Integer) obj;

cmq vedrò di metere alla prova il metodo per vedere se effettivamente funziona...

mi dite come avete implementato l'interface Comparable?

graz

nous
Si ok ma non ci siamo capiti : ha ragione chi ti dice che non puoi, a rigor di logica, farlo. Ti ho suggerito di usare il metodo intValue() dell'oggetto Integer per ottenere quello che vuoi, cioè un int.
Leggi bene quello che ho scrito ;)

dayfallen
Originally posted by filipp8
Per il progetto di info bisogna fare le classi Seme e Valore implementando l'interfaccia Comparable, giusto?
quindi devo ridefinire il metodo compareTo(Object o), giusto?
come mai allora, quando vado a fare il cast sull'object per ottenere un int mi dice che l'object è un "inconvertible types"?

questo è il metodo che ho scritto:

public int compareTo(Object obj)
{
int n = (int) obj;
if (s < n) return -1;
else if (s > n) return 1;
else return 0;
}


Non capisco perché vuoi confrontare un Seme o un Valore con un int... l'interfaccia Comparable è per confrontare degli oggetti dello stesso tipo...
Nel tuo caso invece è come fare un confronto tra un Rettangolo e un intero... :?

filipp8
non voglio confrontare un Valore con un int... voglio assegnare a un Valore un rispettivo int in modo da confrontare i Valori liberamente ed avere come ritorno un 1, -1 o 0 a seconda dei casi...

cmq ripeto che questo codice me lo compila tranquillo

public int compareTo(Object obj)
{
int n = (Integer) obj;
if (s < n) return -1;
else if (s > n) return 1;
else return 0;
}

cmq se l'n che ottengo così non è un int, proverò con l'intValue()...

però vi chiedo ancora una volta, voi come avete implementato l'interface Comparable?

grazie ancora per la pazienza

K)M4STER
Comincia con il valutare i consigli che ti sono stati dati (per altro tutti buoni), se proprio non vuoi farlo allora procedi come vuoi tu!

però vi chiedo ancora una volta, voi come avete implementato l'interface Comparable?


Sicuramente nel compareTo non confronto 2 interi, oltre ad essere estremamente riduttivo rischia effettivamente di lanciare eccezioni assurde...

filipp8
Sicuramente nel compareTo non confronto 2 interi, oltre ad essere estremamente riduttivo rischia effettivamente di lanciare eccezioni assurde...


Discutiamo su questa cosa...
come fai a confrontare due oggetti della classe Valore se non definisci dei criteri di paragone? il metodo compareTo(Object o) definito nella classe Valore descrive il criterio del paragone tra due oggetti della classe Valore... nella definizione del metodo di paragone non puoi confrontare due oggetti della classe Valore in quanto non è ancora stato definito il metodo per farlo... confronti quindi l'int che definisce il valore dell'oggetto della classe Valore (scusate il gioco di parole)...
alla fine si riduce tutto ad un confronto fra due int...
capite cosa intendo dire?

dayfallen
Originally posted by filipp8
Discutiamo su questa cosa...
come fai a confrontare due oggetti della classe Valore se non definisci dei criteri di paragone? il metodo compareTo(Object o) definito nella classe Valore descrive il criterio del paragone tra due oggetti della classe Valore... nella definizione del metodo di paragone non puoi confrontare due oggetti della classe Valore in quanto non è ancora stato definito il metodo per farlo... confronti quindi l'int che definisce il valore dell'oggetto della classe Valore (scusate il gioco di parole)...
alla fine si riduce tutto ad un confronto fra due int...
capite cosa intendo dire?


hai presente il metodo get() di Valore e di Seme... è stato creato apposta...

K)M4STER
Come ti ha detto DayFallen...
Se vuoi confrontare degli interi basta fare il get dei due valori, diverso è confrontare 2 oggetti di tipo Valore (e x questo esiste il compareTo)

dayfallen
Originally posted by K)M4STER
Come ti ha detto DayFallen...
Se vuoi confrontare degli interi basta fare il get dei due valori, diverso è confrontare 2 oggetti di tipo Valore (e x questo esiste il compareTo)


Ehehe grazie per l'appoggio K)M4STER :-D

filipp8
Originally posted by K)M4STER
Come ti ha detto DayFallen...
Se vuoi confrontare degli interi basta fare il get dei due valori, diverso è confrontare 2 oggetti di tipo Valore (e x questo esiste il compareTo)


Si, ma alla fine dei conti, nel compareTo confronto due interi che ricavo con i relativi get()...
quindi se io scrivo valore1.compareTo(valore2) il codice del compareTo mi ricava i rispettivi interi e li confronta tra di loro...

mentre tu stesso poco più sopra dicevi che nel compareTo non confronti due interi...

cmq ho fatto tutto e sembra funzionare... non lancia alcuna eccezione e non vedo infatti perché dovrebbe lanciarla...

cmq secondo me stiamo dicendo le stesse identiche cose, solo che non ci capiamo... o forse sono solo io che sono duro...

0m4r
Originally posted by filipp8
si, ma se mi accetta int n = (Integer) obj;
alla fine n è per forza un intero, altrimenti non avrebbe compilato...
tu devi fare il progetto? come hai implementato l'interface Comparable?


NO, io non devo fare il progetto, ho gia dato a mio tempo.
Indipendentemente da questo, anche se il tuo metodo funziona, quello più elegante è senz'altro quello suggerito da nous... e vai tranquillo che di lui ti puoi fidare...

nous
Originally posted by 0m4r
e vai tranquillo che di lui ti puoi fidare...


Stai bene :shock: ?
Cmq mi ero un pelo dissociato dalla discussione sull'interfaccia per quella cosa. In effetti, se davvero esiste un metodo che ritorna il valore del seme, sarebbe decisamente più elegante passare come parametro l'oggetto e non semplicemente il suo valore.

dayfallen
Originally posted by nous
Stai bene :shock: ?
Cmq mi ero un pelo dissociato dalla discussione sull'interfaccia per quella cosa. In effetti, se davvero esiste un metodo che ritorna il valore del seme, sarebbe decisamente più elegante passare come parametro l'oggetto e non semplicemente il suo valore.

Appunto...

foolish
ma prtoprio per il fatto che viene ritornato il valore del seme e della carta si può eviatre di usare il metodo compareTo di carta e seme.

nelle specifiche c'è scritto di implementarlo nella maniera più opportuna.... imho non di implementarlo per forza.

nous
Nella specifica (che ho letto di sfuggita) c'è scritto di implementare l'interfaccia...imho è molto meglio farlo che no ;)
Ma poi io mica devo fare il progetto, oh :D:D

foolish
"...nel modo giudicato più opportuno."
lo dice per carta, seme e valore.

magari è come dici tu, ma secondo me intendono dire anche che per questo (e solo questo metodo) lasciano carta bianca.

cmq ormai è tardi ... les jeux sont faits

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate