Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS GeForce RTX 5080 Noctua OC Edition: una custom fenomenale, ma anche enorme
ASUS GeForce RTX 5080 Noctua OC Edition: una custom fenomenale, ma anche enorme
ASUS e Noctua tornano a collaborare con la GeForce RTX 5080 Noctua OC Edition, una scheda pensata per chi cerca potenza estrema e silenziosità assoluta. Il nuovo sistema di raffreddamento, con tre ventole Noctua NF-A12x25 G2 da 120 mm e una camera di vapore maggiorata, promette temperature record e rumorosità quasi impercettibile. Non mancano dual BIOS, materiali di qualità e ampie possibilità di overclock. Ma quanto migliora davvero rispetto alla Founders Edition? Scoprilo nel nostro test completo.
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Il più recente robot per la pulizia domestica di Dreame, modello Aqua10 Ultra Roller, abbina un potente motore di aspirazione della polvere a un sofisticato sistema di lavaggio con rullo integrato. Il tutto governato dalla logica di intelligenza artificiale, per i migliori risultati
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-10-2006, 12:33   #1
leox@mitoalfaromeo
Senior Member
 
L'Avatar di leox@mitoalfaromeo
 
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
[Java] devo creare un multiset...

Ciao
Sto convertendo un generatore di istanze pseudocasuali da c++ a java (per i noti problemi di ripetibilità del primo linguaggio)
ho quasi finito ma mi manca un ultimo step...

In c++ avevo usato un multiset per inserire quando mi serviva in una lista una serie di oggetti di tipo Event da me creato. Avevo ridefinito l'operatore < su questi oggetti in modo che confrontasse il campo Event.time. Nella pratica questa bella costruzione mi permetteva di inserire in lista gli eventi man mano che li generavo e di avere alla fine una lista cronologicamente ordinata...

Si può fare qualcosa del genere in java?? ho definito sulla classe Event il metodo isBefore() per l'ordinamento ma ora non saprei bene come fare... ho visto sulla doc del sito java che la classe multiset esiste ma non si capisce come costruirne un oggetto nè come specificare il metodo di ordinamento...

(non ditemi che devo fare un vettore e poi ordinarlo...)
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD
ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB

Ultima modifica di leox@mitoalfaromeo : 29-10-2006 alle 12:35.
leox@mitoalfaromeo è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 12:49   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Credo che tu possa usare un TreeSet. La cosa più simile a quanto hai fatto in C++ è dichiarare il tuo Event concretizzazione di Comparable<Event>. A questo punto dovrai dotare Event di un metodo:

Codice:
public int compareTo(Event that) {
   restituisce
        zero se this vale quanto that
        un numero minore di zero se this è minore di that
        un numero maggiore di zero se this è maggiore di that
}
Probabilmente farai il confronto dell'equivalente del campo time. Comunque sia, una volta che hai fatto diventare Event un Comparable, il metodo compareTo diventa la definizione dell'ordine naturale degli oggetti Event. E hai finito. TreeSet è uno dei tanti attrezzi che sanno cosa fare con elementi naturalmente ordinabili. Sa anche cosa fare con elementi non direttamente ordinabili ma è un altro paio di maniche.

Codice:
TreeSet<Event> eventSet = new TreeSet<Event>();
Quando aggiungi un Event ad eventSet TreeSet si occupera di fare in modo che lo scorrimento dell'insieme presenti quel dato evento in una posizione consona all'ordine naturale degli Event.

Il tutto a meno che io non abbia capito una mazza, nel qual caso scomparirò con una pernacchia e una piroetta .
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 13:57   #3
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
nella documentazione ufficiale di java leggiti le info relative all'interfaccia Comparable che deve essere implementata dalla tua classe per poter definire un ordinamento naturale tra le istanze di tale classe. In tal modo potrai usare l'operatore > o < perchè il compilatore userà automaticamente il metodo compareTo (come detto da PGI-bis) da te creato perchè richiesto dall'interfaccia comparable
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 14:20   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
A meno che non abbiano introdotto una nuova regola per il linguaggio, se PGI-BIS avesse veramente detto "potrai usare l'operatore > o < perchè il compilatore userà automaticamente il metodo compareTo" allora PGI-Bis dovrebbe fare harakiri. Con la tastiera, perchè così fa più male.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 14:28   #5
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
si scusate, ho detto una vaccata

cmq a scanso di equivoci citavo PGI-bis in merito al metodo compareTo, e basta
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 15:06   #6
leox@mitoalfaromeo
Senior Member
 
L'Avatar di leox@mitoalfaromeo
 
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
perdonatemi se dico vaccate, in fondo sono un povero ingegnere gestionale..

il primo step che dovevo fare, se ho capito bene, era quello di dichiarare la classe Event come un'estensione di Comparable... giusto?
quindi ho dichiarato:
Codice:
public class Event implements Comparable
ma mi ritorna un errore (che nei giorni scorsi già mi ha rotto le palle con Queue fino ad obbligarmi a rinunciare al suo uso...)
Codice:
jgenerator.Event is not abstract and does not override abstract method compareTo(java.lang.Object) in java.lang.Comparable
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD
ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB
leox@mitoalfaromeo è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 15:09   #7
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
credo ti stia dicendo che hai dichiarato che la tua classe avrebbe implementatao l'interfaccia comparable, ma per implementare tale interfaccia devi definire il metodo compareTo
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 15:27   #8
leox@mitoalfaromeo
Senior Member
 
L'Avatar di leox@mitoalfaromeo
 
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
purtroppo anche definendo il metodo compareTo non cambia nulla...
EDIT:
invece no!!!
bisognava dichiararlo così:
Codice:
public class Event implements Comparable<Event>
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD
ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB

Ultima modifica di leox@mitoalfaromeo : 29-10-2006 alle 15:29.
leox@mitoalfaromeo è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 15:36   #9
leox@mitoalfaromeo
Senior Member
 
L'Avatar di leox@mitoalfaromeo
 
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
ma poi l'implementazione di compareTo come si fa?!?!
ho provato così:
Codice:
public int compareTo(Event e) {
        return this.time_when.compareTo(e.time_when);
    }
andrà bene??
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD
ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB
leox@mitoalfaromeo è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 15:38   #10
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
come avrai capito il metodo richiesto da un'interfaccia ha un descrittore dello scope del metodo, un tipo di dato da ritornare e una lista di argomenti che DEVONO essere rispettati e che sono definiti nell'interfaccia che implementi
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 15:42   #11
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da leox@mitoalfaromeo
ma poi l'implementazione di compareTo come si fa?!?!
ho provato così:
Codice:
public int compareTo(Event e) {
        return this.time_when.compareTo(e.time_when);
    }
andrà bene??

allora, in soldoni il metodo compareTo deve ritornare un intero >0 se this è concettualmente maggiore dell'argomento del metodo, <0 se this è concettualmente minore di bla bla e =0 se le due entità sono concettualmenti uguali. in particolare compareTo deve tornare 0 se e solo se il metodo equals() dell'interfaccia comparable torna true. trovi questi dettami nella doc ufficiale dell'interfaccia comparable.

se il membro time_when ammette un metodo compareTo coretto, direi che quello che hai scritto va benissimo
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 16:05   #12
leox@mitoalfaromeo
Senior Member
 
L'Avatar di leox@mitoalfaromeo
 
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
Quote:
Originariamente inviato da mad_hhatter
allora, in soldoni il metodo compareTo deve ritornare un intero >0 se this è concettualmente maggiore dell'argomento del metodo, <0 se this è concettualmente minore di bla bla e =0 se le due entità sono concettualmenti uguali. in particolare compareTo deve tornare 0 se e solo se il metodo equals() dell'interfaccia comparable torna true. trovi questi dettami nella doc ufficiale dell'interfaccia comparable.

se il membro time_when ammette un metodo compareTo coretto, direi che quello che hai scritto va benissimo
bè si.. time_when è fondamentalmente un intero quindi dovrebbe funzionare....
ora cmq ho un altro maledettissimo problema... devo stampare gli eventi nel TreeSet ma non capisco come fare... perchè il maledetto non ha un metodo che restituisce l'elemento i-esimo, ma semplicemente first() o last()...
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD
ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB
leox@mitoalfaromeo è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 16:10   #13
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
http://java.sun.com/j2se/1.5.0/docs/...l/TreeSet.html

guarda il metodo iterator()

per jdk 1.4.2 : http://java.sun.com/j2se/1.4.2/docs/...l/TreeSet.html
stesso metodo

Ultima modifica di mad_hhatter : 29-10-2006 alle 16:13.
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 16:56   #14
leox@mitoalfaromeo
Senior Member
 
L'Avatar di leox@mitoalfaromeo
 
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
Quote:
Originariamente inviato da mad_hhatter
in realtà l'avevo visto... ma non capivo e tuttora non capisco come usarlo...

ho provvisoriamente risolto in questo modo:
Codice:
Event[] outBuf= new Event[eventSet.size()];
        eventSet.toArray(outBuf);
        for(int i=0; i<outBuf.length; i++){
            System.out.println(outBuf[i].toString());}
dove eventSet è il TreeSet... forse non è particolarmente elegante ma funziona

in particolare ho potuto verificare che l'ordinamento viene fatto correttamente in base al tempo!!

GRAZIE 1000 A TUTTI.. siete stati preziosissimi, vi citerò nei ringraziamenti della tesi
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD
ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB

Ultima modifica di leox@mitoalfaromeo : 29-10-2006 alle 16:59.
leox@mitoalfaromeo è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2006, 17:10   #15
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
in bocca al lupo
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2006, 11:56   #16
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Dovrebbe funzionare anche così, non serve convertirlo in array:
Codice:
for( Event e : eventSet )
    System.out.println( e );
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2006, 16:47   #17
leox@mitoalfaromeo
Senior Member
 
L'Avatar di leox@mitoalfaromeo
 
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
Quote:
Originariamente inviato da lovaz
Dovrebbe funzionare anche così, non serve convertirlo in array:
Codice:
for( Event e : eventSet )
    System.out.println( e );
semmai
Codice:
for( Event e : eventSet )
    System.out.println( e.toString() );
provo, poi vi dirò
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD
ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB
leox@mitoalfaromeo è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2006, 21:10   #18
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
quando fai print(e) il compilatore chiama automaticamente il corrispondente metodo toString()... stavolta sono sicuro (quasi )
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2006, 20:17   #19
leox@mitoalfaromeo
Senior Member
 
L'Avatar di leox@mitoalfaromeo
 
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
allora miei cari... oggi sono stato a fare 2 chiacchiere col prof e tra le altre cose ho risolto il problema dell'accesso agli elementi del treeSet...

la chiave era effettivamente il metodo iterator().
In particolare bisogna creare un oggetto di tipo Iterator che poi supporterà i metodi Next() che restituisce l'elemento successivo e HasNext() che è un booleano per trovare la fine del vettore..
è una cosa nuova di java 1.5.

quindi il mio ciclo di stampa sul treeSet è venuto così:
Codice:
for(Iterator i=j.eventSet.iterator(); i.hasNext(); )
            System.out.println(i.next());
e l'amico mad aveva ragione sul fatto che non è necessario chiamare toString() al momento della stampa perchè lo capisce da sè!
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD
ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB
leox@mitoalfaromeo è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2006, 21:45   #20
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da leox@mitoalfaromeo
allora miei cari... oggi sono stato a fare 2 chiacchiere col prof e tra le altre cose ho risolto il problema dell'accesso agli elementi del treeSet...

la chiave era effettivamente il metodo iterator().
In particolare bisogna creare un oggetto di tipo Iterator che poi supporterà i metodi Next() che restituisce l'elemento successivo e HasNext() che è un booleano per trovare la fine del vettore..
è una cosa nuova di java 1.5.
Di al tuo professore che è ora che si aggiorni. Iterator c'è da Java 1.2 (praticamente da poco dopo che Noè scese dalla barca ).

Quello che c'è in Java5 è Iterable che è uno dei mezzi che ti consente di usare il ciclo foreach proposto da Lovaz e che, a questo punto, suppongo che tu debba usare.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS GeForce RTX 5080 Noctua OC Edition: una custom fenomenale, ma anche enorme ASUS GeForce RTX 5080 Noctua OC Edition: una cus...
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo Dreame Aqua10 Ultra Roller, la pulizia di casa c...
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Ewiva inaugura a Piacenza la prima stazi...
BOOX amplia la gamma E Ink: arrivano Pal...
Perché il web ieri è crollato: come il D...
Ryzen 9 9950X3D2 e Ryzen 7 9850X3D in ar...
Alice Pizza accelera sull’innovazione: c...
Via acari e polvere da materassi, tappet...
Apple sfida l’UE in tribunale: “Il Digit...
Non puoi permetterti una vacanza? Questa...
S.T.A.L.K.E.R. 2 arriva su PS5: nuovo tr...
Light Base 500 LX, arriva il nuovo case ...
AMD prepara un colpo grosso: Ryzen 9000G...
Aumento delle accise sul diesel: l'allar...
Google paga 15 Superfan per provare i nu...
Ora legale permanente: il dibattito torn...
Numeri record per Toyota in Europa: sfio...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:20.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v