Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Stampare LinkedList ordinata secondo un parametro

    Salve a tutti ragazzi ho un problema ho la seguente lista:
    LinkedList <Circuito> lista_circuiti
    Dove Circuito è la seguente classe:
    codice:
    public class Circuito
    {
    	private String name;
    	private String location;
    	private LinkedList <Curva> lista_curve;
    	private int lunghezza;
    	public Circuito(String nome,String loc,int lung,LinkedList <Curva> list)
    	{
    		name=nome;
    		location=loc;
    		lung=lunghezza;
    		lista_curve=list;
    	}
    	public String getNomeCircuito()
    	{
    		return name;
    	}
    	public String getLocation()
    	{
    		return location;
    	}
    }
    Mi viene chiesto di stampare tutti i circuiti, dal più lungo al più corto; quindi secondo il parametro lunghezza.
    Secondo vai qual'è la strada più semplice da seguire??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Stampare LinkedList ordinata secondo un parametro

    Originariamente inviato da identikit_man
    Secondo vai qual'è la strada più semplice da seguire??
    Usare Collections.sort passando, oltre alla lista, una tua implementazione di Comparator<Circuito> che definisce il criterio di ordinamento (che come hai detto è sulla lunghezza).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: Stampare LinkedList ordinata secondo un parametro

    Originariamente inviato da andbin
    Usare Collections.sort passando, oltre alla lista, una tua implementazione di Comparator<Circuito> che definisce il criterio di ordinamento (che come hai detto è sulla lunghezza).
    Quindi mi devo andare a creare un altra classe che implementi l'interfaccia Comparator e andare e andare a riscrivere in questa classe il metodo che mi permette di ordinare gli oggetti Circuito??

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Stampare LinkedList ordinata secondo un parametro

    Originariamente inviato da identikit_man
    Quindi mi devo andare a creare un altra classe che implementi l'interfaccia Comparator e andare e andare a riscrivere in questa classe il metodo che mi permette di ordinare gli oggetti Circuito??
    In questo post avevo fatto un esempio, sebbene gli elementi erano String e non oggetti più complessi. Ma il concetto è lo stesso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ok ok ho capito.Mi restano solo 2 dubbi.
    Posso implementare l'interfaccia nella stessa classe Circuito; cioè nel seguente modo?

    public class Circuito implements Comparator<Circuito>

    E poi il secondo dubbio riguarda il funzionamento; del metodo ho visto che restituisce un intero,ma poi l'ordinamento viene fatto in base a quest'intero???
    Comunque ho implementato il metodo nel seguente modo:
    codice:
    public int compare(Circuito c1,Circuito c2)
    {
    	if(c1.getLunghezza()>c2.getLunghezza())
    	{
    		return 1;
    	}
    	else
    	{
    		if(c1.getLunghezza()<c2.getLunghezza())
    		{
    			return -1;
    		}
    		else
    		{
    			return 0;
    		}
    	}
    }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da identikit_man
    Posso implementare l'interfaccia nella stessa classe Circuito; cioè nel seguente modo?

    public class Circuito implements Comparator<Circuito>
    Tecnicamente sì, certo (non c'è niente nel linguaggio che lo vieta). Ma concettualmente no e non è neppure molto bello come "design".
    Innanzitutto di Comparator per un certo tipo ne puoi implementare quanti ne vuoi e il fatto di fissarne uno sullo stesso tipo che stai comparando ... non è certo una buona cosa.
    Inoltre, tu devi passare al sort una implementazione di Comparator e in questo caso dovresti passare un oggetto Circuito ... quale? Passi uno qualunque di quelli che hai già? O peggio ... ne istanzi uno nuovo? Vedi che non ha molto senso ....

    Originariamente inviato da identikit_man
    E poi il secondo dubbio riguarda il funzionamento; del metodo ho visto che restituisce un intero,ma poi l'ordinamento viene fatto in base a quest'intero???

    public int compare(Circuito c1,Circuito c2)
    compare deve solo restituire:
    valore < 0 se c1 è minore di c2
    valore 0 se c1 è uguale a c2
    valore > 0 se c1 è maggiore di c2

    Il sort userà questa informazione per sapere come spostare i due elementi man mano che fa varie combinazioni di confronti.


    Originariamente inviato da identikit_man
    codice:
    public int compare(Circuito c1,Circuito c2)
    {
    	if(c1.getLunghezza()>c2.getLunghezza())
    	{
    		return 1;
    	}
    	else
    	{
    		if(c1.getLunghezza()<c2.getLunghezza())
    		{
    			return -1;
    		}
    		else
    		{
    			return 0;
    		}
    	}
    }
    Corretto. Potresti comunque compattare con l'operatore condizionale ?:
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Alla fine ho implementato la seguente classe:
    codice:
    public class CompareCircuito implements Comparator <Circuito>
    {
    	public int compare(Circuito c1,Circuito c2)
    	{
    		if(c1.getLunghezza()>c2.getLunghezza())
    		{
    			return 1;
    		}
    		else
    		{
    			if(c1.getLunghezza()<c2.getLunghezza())
    			{
    				return -1;
    			}
    			else
    			{
    				return 0;
    			}
    		}
    		
    	}
    }
    Comunque potrei anche utilizzare una classe anonima senza necessariamente creare un altro file???
    Potresti spiegarmi meglio anche il discorso dell'operatore :? non l'ho mai utilizzato??

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da identikit_man
    Alla fine ho implementato la seguente classe:
    Potresti spiegarmi meglio anche il discorso dell'operatore :? non l'ho mai utilizzato??
    ? : non : ?

    L'espressione condizione ? A : B restituisce A se condizione vale true, B altrimenti


    ps: usa il tag CODE per postare il codice
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Originariamente inviato da Alex'87
    ps: usa il tag CODE per postare il codice


    @identikit_man: ora ho corretto io, in futuro ricordatene.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da identikit_man
    Alla fine ho implementato la seguente classe:
    codice:
    public class CompareCircuito implements Comparator <Circuito>
    Ok, ottimo.

    Originariamente inviato da identikit_man
    Comunque potrei anche utilizzare una classe anonima senza necessariamente creare un altro file???
    Assolutamente sì, non ci sarebbe nulla di inappropriato.

    Originariamente inviato da identikit_man
    Potresti spiegarmi meglio anche il discorso dell'operatore :? non l'ho mai utilizzato??
    Il corpo del compare diventerebbe di sole 2 righe:
    codice:
    return c1.getLunghezza() > c2.getLunghezza() ? +1 :
           c1.getLunghezza() < c2.getLunghezza() ? -1 : 0;
    Come l'ho scritto è solo perché così è chiaro e leggibile. Ma puoi anche mettere tutto su 1 riga.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.