Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
Dopo anni di attesa e una lunga fase di sviluppo, Noctua entra nel mercato dei dissipatori a liquido AIO con la nuova serie NL-LC1. Forte dell'esperienza maturata nel raffreddamento ad aria, l'azienda austriaca promette di portare la propria filosofia fatta di qualità costruttiva, attenzione ai dettagli e silenziosità anche in questo segmento. Abbiamo provato il nuovo sistema per scoprire se riesce a distinguersi in un mercato ormai molto competitivo.
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Arrivato sul mercato italiano a fine marzo, la serie Boox Go 10.3 (Gen II) offre Android 15, penna da 4096 livelli e retroilluminazione opzionale (nel modello da noi provato, Lumi, presente). La serie si compone di due tablet ePaper che fanno da e-reader, blocco note digitale e persino browser, tutto a un prezzo che fa dimenticare i prodotti di brand più blasonati
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-05-2011, 16:27   #1
cifa
Member
 
Iscritto dal: Sep 2007
Messaggi: 59
[JAVA] Comparable ed interi

Salve a tutti ho un piccolo problemino, per utilità mi son creato una classe
Codice:
public class ListaOrdinata<Chiave, Valore>
che utilizzo sia con <String, Valore> che con <Integer, Valore>. Con String va tutto bene, ma con gli Integer agisce come se i numeri a singola cifra fossero > di quelli a doppia cifra.

Ecco i metodi che uso per l'insert "ordinato"

Codice:
		public boolean minore(Nodo<K,V> nodo) {
			return minore(nodo.chiave, chiave);
		}

		public boolean minore(K k1, K k2) {
			if (k1 == null) return false;
			if (k2 == null) return true;
			return (k1.toString().compareTo(k2.toString()) < 0 );
		}



Codice:
	

public void insert(Chiave k, Valore v) {
		testa = insert(k, v, testa);
	}

private Nodo<Chiave,Valore> insert(Chiave k,  Valore el, Nodo<Chiave,Valore> testa) {

		// caso 1: la lista e' vuota
		if (testa == null)
			return new Nodo<Chiave,Valore>(k,el);
		
		
		// caso 2: la chiave e' maggiore del primo elemento e un nuovo nodo va inserito prima
		if (testa.minore(k,testa.chiave)) {
			Nodo<Chiave,Valore> nuovo = new Nodo<Chiave,Valore>(k,el);
			nuovo.prox = testa;
			return nuovo;
		}

		// caso 3: l'elemento va inserito nel resto della lista
		testa.prox = insert(k, el, testa.prox);
		return testa;
	}

Come posso risolvere ?

Vi ringrazio
cifa è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 16:53   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il problema è che il PC non è abbastanza intelligente per capire da solo che se una stringa contiene un numero allora potresti volerlo ordinare per la quantità che esprime anziché per la sequenza di caratteri da cui è composto.

Detto altrimenti,

"10" > "9.5" ? no perché il carattere "1" vale meno del carattere "9"
10 > 9.5? sì perché 10 è maggiore di 9.5

Posto che si tratta di un problema già risolto nelle librerie standard, l'intoppo si aggirerebbe "parametrizzando" il confronto che fai nel metodo "minore", vale a dire considerando che tipi di dato diversi possono richiedere funzioni d'ordine diverse.

Dovresti cioè dire: se k1 e k2 esprimono dei numeri allora non uso un ordinamento lessicografico ma userò un ordinamento numerico, considerandoli come numeri (cioè li converti a Long o Double secondo i casi).

Da lì ti accorgerai che ci sono casi che richiedono un tanto di arbitrarietà: ad esempio una stringa e un numero o un JPanel e un Point. Come li ordini? Be', come preferisci.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 17:34   #3
cifa
Member
 
Iscritto dal: Sep 2007
Messaggi: 59
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Il problema è che il PC non è abbastanza intelligente per capire da solo che se una stringa contiene un numero allora potresti volerlo ordinare per la quantità che esprime anziché per la sequenza di caratteri da cui è composto.

Detto altrimenti,

"10" > "9.5" ? no perché il carattere "1" vale meno del carattere "9"
10 > 9.5? sì perché 10 è maggiore di 9.5

Posto che si tratta di un problema già risolto nelle librerie standard, l'intoppo si aggirerebbe "parametrizzando" il confronto che fai nel metodo "minore", vale a dire considerando che tipi di dato diversi possono richiedere funzioni d'ordine diverse.

Dovresti cioè dire: se k1 e k2 esprimono dei numeri allora non uso un ordinamento lessicografico ma userò un ordinamento numerico, considerandoli come numeri (cioè li converti a Long o Double secondo i casi).

Da lì ti accorgerai che ci sono casi che richiedono un tanto di arbitrarietà: ad esempio una stringa e un numero o un JPanel e un Point. Come li ordini? Be', come preferisci.
Chiarissimo, grazie mille
cifa è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 18:10   #4
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13002
Non basterebbe evitare di usare il toString() in minore?

compareTo dovrebbe già includere queste cose, altrimenti a che servono le interfacce?
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 19:11   #5
cifa
Member
 
Iscritto dal: Sep 2007
Messaggi: 59
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Non basterebbe evitare di usare il toString() in minore?

compareTo dovrebbe già includere queste cose, altrimenti a che servono le interfacce?
Eh no perchè compareTo potrebbe non esser definitio in K :\
cifa è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 19:36   #6
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Puoi dichiarare la tua chiave come Comparable, o come K extends Comparable, così sei certo che la tua chiave implementi il metodo compareTo
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 19:42   #7
cifa
Member
 
Iscritto dal: Sep 2007
Messaggi: 59
Quote:
Originariamente inviato da Don[ITA] Guarda i messaggi
Puoi dichiarare la tua chiave come Comparable, o come K extends Comparable, così sei certo che la tua chiave implementi il metodo compareTo
Scusa la domanda, ma sono nuovo di Java ^^

Quindi dovrei fare una cosa del genere ?
Codice:
public class ListaOrdinata<Chiave extends Comparable, Valore>
?
cifa è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 21:04   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Puoi usare TreeMap, che è già incluso nelle librerie standard e funziona allo stesso modo.

Opzione che probabilmente risulterà allettante se consideri che la forma suggerita sarebbe precisamente:

Codice:
public class SortedList<K extends Comparable<? super K>, V> {
La ragione sta nelle 297 pagine dei Java Generics FAQ.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2011, 21:51   #9
cifa
Member
 
Iscritto dal: Sep 2007
Messaggi: 59
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Puoi usare TreeMap, che è già incluso nelle librerie standard e funziona allo stesso modo.

Opzione che probabilmente risulterà allettante se consideri che la forma suggerita sarebbe precisamente:

Codice:
public class SortedList<K extends Comparable<? super K>, V> {
La ragione sta nelle 297 pagine dei Java Generics FAQ.
Ti ringrazio, anche se tutto questo fa parte di un progetto universitario e non avendo ancora fatto alberi e mappe forse è meglio non utilizzarli. In ogni caso per curiosità personale vado a studiarmi TreeMap
cifa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
NVIDIA svela la tecnologia che trasforma...
iPhone del 20° anniversario e AirPods co...
Non solo Prime: ecco le 13 offerte su Am...
Xreal Aura apre le prenotazioni: gli occ...
Snap presenta i nuovi Specs: gli occhial...
Google rilascia Wear OS 7: basato su And...
Microsoft chiude la porta ai Surface da ...
Sedie gaming e da ufficio in offerta: a ...
Viltrox porta il suo 28mm f/4.5 pancake ...
Jensen Huang è andato a zappare l...
Prime Day in anticipo - giorno 3: ci son...
AMD EPYC e Instinct: accordo per fornire...
Amazon spinge Fire TV Stick 4K Select, R...
Ryzen 10000 Olympic Ridge desktop: addio...
Android 17 debutta sui Pixel: ecco cosa ...
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: 11:26.


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