> =0D=0A> On Wed, Dec 11, 2002 at 07:58:36PM +0100, votrusso wrote:=0D=0A= > > Sono Tommaso Russo Massimiliano ti mando l'esercizio che ho fatto par= e =0D=0A> > che vada bene quardalo e dacci un occhiata confermami che va = bene e=0D=0A> =0D=0A> Ciao Tommaso, ti rispondo qui cosi` gli altri posso= no giovarne.=0D=0A> =0D=0A> L'esercizio era di ordinare un elenco di clie= nti alfabeticamente=0D=0A> secondo il nome. Ciascun cliente e` rappresen= tato da un oggetto di=0D=0A> classe Cliente; i clienti sono conservati in= un vettore; l'algoritmo=0D=0A> da usare e` l'insertion sort.=0D=0A> =0D=0A= > Il tuo svolgimento e` corretto, i clienti vengono stampati con i=0D=0A>= nomi in ordine alfabetico. Lo riporto qui sotto per intero, poi lo=0D=0A= > commento brano a brano suggerendo delle migliorie.=0D=0A> =0D=0A> Ecco = l'esercizio:=0D=0A> =0D=0A> =0D=0A> import java.util.*;=0D=0A> class Clie= nte {=0D=0A> public Cliente(String nome,String cognome) {=0D=0A> this.= nome=3Dnome;=0D=0A> this.cognome=3Dcognome;=0D=0A> }=0D=0A> public St= ring nome;=0D=0A> public String cognome;=0D=0A> public int compareTo(Cl= iente cl) {=0D=0A> if(this.nome.compareTo(cl.nome)>0) {=0D=0A> retur= n 1;=0D=0A> } else if(this.nome.compareTo(cl.nome)<0) {=0D=0A> retur= n -1;=0D=0A> } else {=0D=0A> return 0;=0D=0A> }=0D=0A> }=0D=0A> }= =0D=0A> public class InsertionSort {=0D=0A> public static void main(Stri= ng[] argv)throws Exception {=0D=0A> Cliente cl1=3Dnew Cliente("tommaso"= ,"russo");=0D=0A> Cliente cl2=3Dnew Cliente("marco","miccolupi");=0D=0A= > Cliente cl3=3Dnew Cliente("roberto","vicci");=0D=0A> > Cliente cl4=3D= new Cliente("cosimo","rossi");=0D=0A> Cliente cl5=3Dnew Cliente("carmin= e","izzo");=0D=0A> Vector v1=3Dnew Vector();=0D=0A> v1.addElement(cl1= );=0D=0A> v1.addElement(cl2);=0D=0A> v1.addElement(cl3);=0D=0A> v1.= addElement(cl4);=0D=0A> v1.addElement(cl5);=0D=0A> Vector v2=3Dnew Ve= ctor();=0D=0A> for(int i=3D0;i<v1.size();i++) {=0D=0A> Cliente cl=3D= (Cliente)v1.elementAt(i);=0D=0A> if(v2.size()=3D=3D0) {=0D=0A> v2.= addElement(cl); =0D=0A> } else {=0D=0A> Cliente primocl=3D(Cliente= )v2.elementAt(0);=0D=0A> if(primocl.compareTo(cl)>0) {=0D=0A> v2= .insertElementAt(cl,0);=0D=0A> } else {=0D=0A> Cliente ultimocl=3D= (Cliente)v2.elementAt(v2.size()-1);=0D=0A> if(ultimocl.compareTo(cl)= <0) {=0D=0A> v2.addElement(cl);=0D=0A> } else {=0D=0A> f= or(int j=3D0;j<v2.size()-1;j++) {=0D=0A> Cliente sinistrocl=3D(Cli= ente)v2.elementAt(j);=0D=0A> Cliente destrocl=3D(Cliente)v2.elemen= tAt(j+1);=0D=0A> if(sinistrocl.compareTo(cl)<0) {=0D=0A> i= f(destrocl.compareTo(cl)>0) {=0D=0A> v2.insertElementAt(cl,j+1);= =0D=0A> break;=0D=0A> }=0D=0A> }=0D=0A> } = =0D=0A> } =0D=0A> }=0D=0A> }=0D=0A> } =0D=0A> stampa(= v2);=0D=0A> }=0D=0A> public static void stampa(Vector v2) {=0D=0A> Sy= stem.out.println("Elenco ordinato in base al nome:");=0D=0A> System.out= .println();=0D=0A> for(int k=3D0;k<v2.size();k++) {=0D=0A> Cliente s= tampacl=3D(Cliente)v2.elementAt(k);=0D=0A> System.out.println(stampacl= .nome+" "+stampacl.cognome);=0D=0A> }=0D=0A> }=0D=0A> }=0D=0A> =0D=0A>= =0D=0A> // COMMENTI SULLA CLASSE CLIENTE=0D=0A> =0D=0A> class Cliente {=0D= =0A> public Cliente(String nome,String cognome) {=0D=0A> this.nome=3Dn= ome;=0D=0A> this.cognome=3Dcognome;=0D=0A> }=0D=0A> =0D=0A> // Queste= variabili di istanza sono pubbliche. Cio` puo` essere=0D=0A> // un pro= blema, perche' non vogliamo che altri possano modificare=0D=0A> // nome = e cognome di un cliente.=0D=0A> =0D=0A> public String nome;=0D=0A> publ= ic String cognome;=0D=0A> =0D=0A> // Possiamo fare due cose:=0D=0A> //=0D= =0A> // 1) lasciare le variabili pubbliche, ma dichiararle `final'.=0D=0A= > // Cio` significa che, una volta impostate nel costruttore,=0D=0A> > //= nessuno potra` piu` modificare il loro valore, ne'=0D=0A> // dall'inter= no, ne' dall'esterno:=0D=0A> =0D=0A> public final String nome, cognome;=0D= =0A> =0D=0A> // 2) dichiarare la variabili come private, e creare dei me= todi=0D=0A> // `lettori' per renderle disponibili all'esterno in sola le= ttura:=0D=0A> =0D=0A> private String nome, cognome;=0D=0A> =0D=0A> publ= ic String getNome() {=0D=0A> return nome;=0D=0A> } =0D=0A> =0D=0A> pu= blic String getCognome() {=0D=0A> return cognome;=0D=0A> } =0D=0A> =0D= =0A> // Questo metodo serve a comparare due oggetti di classe Cliente=0D= =0A> // in base al cognome:=0D=0A> //=0D=0A> // int result =3D cli= ente1.compareTo(cliente2)=0D=0A> //=0D=0A> // result e` maggiore, minor= e o uguale a zero, a seconda che il=0D=0A> // cognome di cliente1 sia ma= ggiore, minore o uguale a quello del=0D=0A> // secondo.=0D=0A> =0D=0A> = public int compareTo(Cliente cl) {=0D=0A> if(this.nome.compareTo(cl.nom= e)>0) {=0D=0A> return 1;=0D=0A> } else if(this.nome.compareTo(cl.nom= e)<0) {=0D=0A> return -1;=0D=0A> } else {=0D=0A> return 0;=0D=0A>= }=0D=0A> }=0D=0A> =0D=0A> // Da notare che il comportamento di compa= reTo sulle stringhe e`=0D=0A> // uguale, quindi si sarebbe potuto scrive= re piu` brevemente:=0D=0A> =0D=0A> public int compareTo(Cliente c) {=0D=0A= > int result =3D nome.compareTo(c.nome);=0D=0A> return > result;=0D=0A>= }=0D=0A> =0D=0A> // O ancora piu` brevemente:=0D=0A> =0D=0A> public i= nt compareTo(Cliente c) {=0D=0A> return nome.compareTo(c.nome);=0D=0A> = }=0D=0A> =0D=0A> // Naturalmente, se invece di variabili di istanza ave= ssimo avuto=0D=0A> // metodi lettori, avremmo scritto cosi`:=0D=0A> =0D=0A= > public int compareTo(Cliente c) {=0D=0A> return > nome.compareTo(c.get= Nome());=0D=0A> } =0D=0A> =0D=0A> }=0D=0A> =0D=0A> =0D=0A> // COMMENTI S= ULL'IMPLEMENTAZIONE DELL'INSERTION SORT=0D=0A> =0D=0A> public class Inser= tionSort {=0D=0A> public static void main(String[] argv)throws Exception= {=0D=0A> =0D=0A> // Ricordate il selection sort? Tutto si svolgeva in= un solo vettore.=0D=0A> // L'insertion sort e` diverso: c'e` un vettor= e di partenza, non=0D=0A> // ordinato, e un vettore di destinazione, ch= e viene riempito secondo=0D=0A> // un criterio, in modo che, alla fine = dell'operazione, risulti=0D=0A> // ordinato.=0D=0A> //=0D=0A> // Al= la fine del procedimento, il vettore di partenza e` ancora come=0D=0A> = // era all'inizio.=0D=0A> //=0D=0A> // Qui creiamo e riempiamo il vet= tore di partenza:=0D=0A> =0D=0A> Cliente cl1=3Dnew Cliente("tommaso",= "russo");=0D=0A> Cliente cl2=3Dnew Cliente("marco","miccolupi");=0D=0A>= Cliente cl3=3Dnew Cliente("roberto","vicci");=0D=0A> Cliente cl4=3Dn= ew Cliente("cosimo","rossi");=0D=0A> Cliente cl5=3Dnew Cliente("carmine= ","izzo");=0D=0A> Vector v1=3Dnew Vector();=0D=0A> v1.addElement(cl1)= ;=0D=0A> v1.addElement(cl2);=0D=0A> v1.addElement(cl3);=0D=0A> v1.a= ddElement(cl4);=0D=0A> v1.addElement(cl5);=0D=0A> =0D=0A> // Qui crei= amo il vettore di destinazione...=0D=0A> =0D=0A> Vector v2=3Dnew Vector= ();=0D=0A> =0D=0A> // ...e lo riempiamo secondo questo procedimento:=0D= =0A> =0D=0A> // - prendiamo un elemento alla volta dal vettore di parte= nza;=0D=0A> =0D=0A> for(int i=3D0;i<v1.size();i++) {=0D=0A> Cliente = cl=3D(Cliente)v1.elementAt(i);=0D=0A> =0D=0A> // - se il vettore di de= stinazione e` vuoto, inseriamo=0D=0A> // l'elemento appena preso, senz= a troppe cerimonie;=0D=0A> =0D=0A> if(v2.size()=3D=3D0) {=0D=0A> v= 2.addElement(cl); =0D=0A> } else {=0D=0A> =0D=0A> // - altrimenti,= se l'elemento appena preso e` minore=0D=0A> // del primo elemento de= l vettore, inseriamolo prima=0D=0A> // (il primo elemento e tutti gli= altri slitteranno);=0D=0A> =0D=0A> Cliente primocl=3D(Cliente)v2= .elementAt(0);=0D=0A> if(primocl.compareTo(cl)>0) {=0D=0A> v2.in= sertElementAt(cl,0);=0D=0A> } else {=0D=0A> =0D=0A> // - al= trimenti, se l'elemento appena preso e`=0D=0A> // maggiore dell'ulti= mo, aggiungiamolo alla fine=0D=0A> =0D=0A> Cliente ultimocl=3D(= Cliente)v2.elementAt(v2.size()-1);=0D=0A> if(ultimocl.compareTo(cl)<= 0) {=0D=0A> v2.addElement(cl);=0D=0A> } else {=0D=0A> =0D=0A> = // altrimenti percorriamo tutto il vettore di=0D=0A> // desti= nazione, cercando i due elementi tra i=0D=0A> // quali va inserito = quello appena preso=0D=0A> =0D=0A> for(int j=3D0;j<v2.size()-= 1;j++) {=0D=0A> Cliente sinistrocl=3D(Cliente)v2.elementAt(j);=0D=0A= > Cliente > destrocl=3D(Cliente)v2.elementAt(j+1);=0D=0A> > if(= sinistrocl.compareTo(cl)<0) {=0D=0A> if(destrocl.compareTo(cl)>0)= {=0D=0A> v2.insertElementAt(cl,j+1);=0D=0A> break;=0D=0A= > }=0D=0A> > }=0D=0A> > } =0D=0A> > } =0D=0A> = }=0D=0A> }=0D=0A> } =0D=0A> =0D=0A> // Qui viene stampato il vet= tore.=0D=0A> =0D=0A> stampa(v2);=0D=0A> =0D=0A> // Un alternativa p= iu` leggera sarebbe stata:=0D=0A> =0D=0A> System.out.println(v2);=0D=0A= > =0D=0A> // Cio` pero` sarebbe risultato in qualcosa > come:=0D=0A> //= =0D=0A> // [Cliente@12523, Cliente@98038, Cliente@12310]=0D=0A> //= =0D=0A> // ...perche' la classe cliente non ridefisce il metodo=0D=0A> = // toString(), che quindi mantiene il comportamento definito=0D=0A> /= / nella superclasse Object.=0D=0A> =0D=0A> }=0D=0A> =0D=0A> =0D=0A> p= ublic static void stampa(Vector v2) {=0D=0A> System.out.println("Elenco= ordinato in base al nome:");=0D=0A> System.out.println();=0D=0A> for= (int k=3D0;k<v2.size();k++) {=0D=0A> Cliente stampacl=3D(Cliente)v2.el= ementAt(k);=0D=0A> System.out.println(stampacl.nome+" "+stampacl.cogno= me);=0D=0A> }=0D=0A> }=0D=0A> }=0D=0A> =0D=0A> Vi mando i file che scritto da casa commentati spero siano graditi e utili Se ci sono problemi segnalatemelo e gradito un suggerimento su come risolverli (Problemi inerenti alla ricezione della posta e dei file e spiegazioni di come ho svolto glie esercizi saluti. Tommaso Russo -- Attached file included as plaintext by Ecartis -- -- File: file1.txt russo tommaso rosa antonio demezza cosimo iacicco luciano iannace alfredo pierro vincenzo campana donato conte nicola -- Attached file included as plaintext by Ecartis -- -- File: file2.txt altieri emiliano rossi emilio iodice agostino salerno luca cappena vittorio nuzzolo filippo cecere tullio caprio fancesco -- Attached file included as plaintext by Ecartis -- -- File: file3.txt altieri emiliano campana donato cappena vittorio caprio fancesco cecere tullio conte nicola demezza cosimo iacicco luciano iannace alfredo iodice agostino nuzzolo filippo pierro vincenzo rosa antonio rossi emilio russo tommaso salerno luca -- Binary/unsupported file stripped by Ecartis -- -- Type: application/octet-stream -- File: TestFusione.java -- Binary/unsupported file stripped by Ecartis -- -- Type: application/octet-stream -- File: TestOrdinaRicerca.java