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