Oppure

Loading
07/11/10 19:50
netarrow
Molto meglio.
però questi due field:

private static Contatto[] contatti = new Contatto[100];
private static int i = 0;

non devono essere statici, vorrebbe dire che sarebbero condivisi da TUTTE le istanze di Rubrica, cosa ovviamente scorretta perchè ti impedirebbe di creare diverse rubriche con diverso stato interno.
aaa
07/11/10 19:55
crashoverride
Si hai ragione! :)



Grazie a tutti per l'aiuto! :)
aaa
12/11/10 10:18
eddiewrc
"cerca" non dovrebbe essere statico?
aaa
13/11/10 12:42
crashoverride
Ho appena studiato le Interfacce e le classi astratte... secondo voi avrebbe senso creare un interfaccia Ricerca con metodo astratto cerca e poi implementarla in rubrica?? :)
Ultima modifica effettuata da crashoverride 13/11/10 13:06
aaa
13/11/10 13:06
netarrow
Avrebbe senso solo se esistesse codice che dovrebbe richiamare su Rubrica solo cerca, senza essere consapevole che il tipo effettivo sia per forza Rubrica o un qualsiasi altro tipo che implementi l'interfaccia.
Un'interfaccia puoi vederla come un "vista" su un tipo più complesso e/o più specifico.

Se proprio vuoi provare a usare già ora le classi astratte e le interfacce potresti decidere che una Rubrica può contenere al suo interno a sua volta una Rubrica, praticamente fare in modo che un Contatto possa a sua volta essere anch'esso una Rubrica e creare quindi "gruppi" di contatti all'interno della Rubrica.
Creando di fatto un albero.

Per fare questo correttamente dovresti implementare uno dei pattern fondamentali dell'analisi del software, il Composite: it.wikipedia.org/wiki/…
Che ti farebbe appunto usare interfacce, astrazione ecc...

Ma forse è presto per impelagarti in queste cose, ci saranno degli esercizi specifici su astrazione e polimorfismo nel libro.
Ti conviene fare quelli.
aaa
20/11/10 19:40
crashoverride
Ciao, dopo aver studiato il framework Collections e quindi anche le Collection ho deciso di provare a modificare il programma per fare in modo che utilizzi le Collection e non gli array...
Ho usato come mi hai detto tu una Hashtable con i generics
Ecco il codice:
Ho modificato solo la classe Rubrica.java
import java.util.*;
public class Rubrica {
	private Hashtable<String,Contatto> contatti = new Hashtable<String,Contatto>();
	
	
	public void addContact(Contatto contatto){
		contatti.put(contatto.getNome(), contatto);		
	}
	
	public String cercaNome(String nomeDaCercare){
		if(contatti.containsKey(nomeDaCercare)){
			return contatti.get(nomeDaCercare).getInfo();
		}
		else{
			return "Name not found";
		}
	}

}



Tutto apposto??? :)
aaa
20/11/10 20:22
netarrow
Il metodo cercaNome invece di fargli ritornare una String e quindi il GetInfo, fagli ritornare Contatto e ritorna l'oggetto associato alla chiave.

Così sarà il codice client a decidere cosa farne del risultato.

Nel caso in cui il contatto non venga trovato ritorna null.
aaa
21/11/10 0:19
crashoverride
Ho fatto tutto come hai detto ;)

Rubrica.java

import java.util.*;
public class Rubrica {
	private Hashtable<String,Contatto> contatti = new Hashtable<String,Contatto>();
	
	
	public void addContact(Contatto contatto){
		contatti.put(contatto.getNome(), contatto);		
	}
	
	public Contatto cercaNome(String nomeDaCercare){
		if(contatti.containsKey(nomeDaCercare)){
			return contatti.get(nomeDaCercare);
		}
		else{
			return null;
		}
	}

}


E ho dovuto modificare la classe contenente il main ovviamente:
TestRubrica.java
import java.util.Properties;


public class TestRubrica {

	public static void main(String[] args) {
		Contatto uno = new Contatto("Nicola","Via fasulla 123","3453424321213");
		Contatto due = new Contatto("Francesco","Via ciuskino 123","3453424321213");
		Contatto tre = new Contatto("Ashley","Via millemila 123","3453424321213");
		Rubrica r = new Rubrica();
		r.addContact(uno);	
		r.addContact(due);
		r.addContact(tre);
		Contatto risultato = r.cercaNome("Nicola");
		if(risultato == null){
			System.out.println("Il nome non esiste.");
		}else{
			System.out.println(risultato.getInfo());
		}
	}

}
aaa