Classe Rubrica

di il
8 risposte

Classe Rubrica

Ciao a tutti sto implementando una classe Rubrica.
VI faccio vedere il costruttore:
public class Rubrica {
private String [] nome;
private String [] telefono;
private String [] email;
public Rubrica (String [] nome, String [] telefono, String [] email) {
this.nome=nome;
this.telefono=telefono;
this.email=email;
}

public int ricercaNome(String nome) {
int z=-1;
for(int i=0;i<this.nome.length;i++)
if(nome.equalsIgnoreCase(this.nome)==true) {
return z=i;
}
// arrivo ai due principali problemi
/* con questo metodo dovrei eliminare un numero dalla rubrica, ho creato un indice k=-1 (che * quindi penso non esiste all'interno della rubrica) e ci inserisco il nome ricercato.Sbaglio?
*/
public void elimina (String nome) {
int k=-1;
int x=ricercaNome(nome);
for(int i=0;i<x.nome.array.length;i++)
int k=nome+telefono+email;
}
/*altro metodo critico: unisci, ovvero prende due rubriche e le unisce in una sola, la mia idea è di *creare una nuova rubrica a, in cui avro tanti elementi pari alla somma degli indici che analizzano *le due rubriche (i, e j) in un nuovo indice che chiamo k;Non sono tanto sicuro della correttezza di *quello che ho scritto quindi mi piacerebbe se mi deste dei consigli, o una soluzione ai miei *possibili errori.
*/
public Rubrica unisci(Rubrica r) {
Rubrica a=new Rubrica();
for(int i=0;i<nome.length;i++)
for (int j=0;j<r.nome.length;j++)
int [] k= +[j]; //punto critico
Rubrica a= nome[k] + telefono [k] + email [k];
}

8 Risposte

  • Re: Classe Rubrica

    Secondo me, mi sono fermato a metà codice, è sbagliato concettualmente:

    io farei così:
    
    class Persona{
    private string nome, cognome, numeroTelefono;
    public Persona(String n1, String c1, String t1){
    this.nome=n1;
    //e così via
    //con tutti i set, get, toString, equals, hashcode
    //e tutti i metodi accessori
    }
    
    e poi gestisci l'agendina in questo modo
    
    class Rubrica{
    List<Persona> listaPersone;
    
    public Rubrica(){
    this.listaPersone=new LinkedList<Persona>();
    }
    
    //metodi di aggiunta e rimozione ed altre cose
    }
    
  • Re: Classe Rubrica

    Ciao zaknafein83, la traccia dell esercizio era quella che mi ha fatto svolgere il costruttore in quel modo, che è corretto. Il problema è proprio cercare di svolgere quei metodi in base a ciò che inizialmente ti fornisce l'esercizio, senza creare la classe persona ecc!
    Facendo come tu proponi, uscirei fuori traccia.
    In base a quello che ho detto, sapresti aiutarmi?!
    grazie
  • Re: Classe Rubrica

    Sbagliato
    if(nome.equalsIgnoreCase(this.nome[i])==true) 
    corretto
    if(nome.equalsIgnoreCase(this.nome[i])) 
  • Re: Classe Rubrica

    public void elimina (String nome) {
    int k=-1;
    int x=ricercaNome(nome);
    for(int i=0;i<x.nome.array.length;i++)
    int k=nome[i]+telefono[i]+email[i];
    }
    questo codice è sbagliato in più punti...innanzitutto nel for basta fare i<x....tutto il resto non ha senso e dovrebbe proprio darti errori il compilatore.
    poi int k= nome e tutto il rtesto danno errori perchè uno è una stringa (nome) e l'altro è un intero

    e questo èm solo l'inizio...correggi e scrivi il codice dentor i tag "code"
  • Re: Classe Rubrica

    Il primo "errore" che tu mi hai fatto notare, non è un vero errore, in quanto anche eclipse non mi da errori se scritto nel modo in cui dico io, o meglio il mio prof.
    Per quanto riguarda il secondo errore hai ragione.Ora lo riscrivo.
    sto rivedendo, per caso conosci/conoscete a chiunque altro si voglia aggiungere un metodo per eliminare un elemento posto in una posizione x, da un array?io penso a System.arraycopy, dovrei farlo copiare dalla posiz 0, a z-1, e da z+1 alla fine dell array iniziale.
    l'array iniziale è nome, quello finale l'ho creato e chiamato tmpN, ma come si usa ora arraycopy?
    appena completo posto il codice
  • Re: Classe Rubrica

    Quella x ritornata da ricerca nome ti dà proprio l'indice da eliminare potresti semplicemente farti un nuovo array di dimensione < 1 rispetto all'originale e ricopiarci dentro tutti gli elementi di posizione diversa da x. Visto che lo devi fare per più array io farei una funzioncina che te lo fa:
    
    private String[] removeIndex(String[] source, int index){
    	if(index > source.length - 1)
    		return source;
    	String[] result = new String[source.length - 1];
    	for(int i = 0; i < x; i++){
    		result[i] = source[i];
    	}
    	for(int i = x + 1; i < result.length; i++){
    		result[i] = source[i];
    	}
    	return result;
    }
    
    Per cui il tuo elimina diventerebbe:
    
    public void elimina (String nome) {
    	int k=-1;
    	int x=ricercaNome(nome);
    	nome = removeIndex(nome, x);
    	telefono = removeIndex(telefono, x);
    	email = removeIndex(email, x);
    }
    
    Se devi eliminare nome, telefono e rubrica della posizione x come presumo.
  • Re: Classe Rubrica

    jekkost ha scritto:


    Il primo "errore" che tu mi hai fatto notare, non è un vero errore, in quanto anche eclipse non mi da errori se scritto nel modo in cui dico io, o meglio il mio prof.
    Indipendentemente dal fatto che un compilatore dia errore o meno, e' una cosa completamentente senza senso, e obsoleto, si potrebbe estendere l'espressione all'infinito, al massimo se il secondo operando fosse stato 'false' avrebbe avuro un po' piu di senso, ma anche in quel caso sarebbe stato piu consigliabile un operatore !(not).
    Sarebbe come aggiungere del per 1 a una moltiplicazione, puoi farlo all'infinito senza modificare il risultato e matematicamente e' corretto ed e' anche uno delle soluzioni presentato per risolvere un'integrale che ora non ricordo.
  • Re: Classe Rubrica

    jekkost ha scritto:


    sto rivedendo, per caso conosci/conoscete a chiunque altro si voglia aggiungere un metodo per eliminare un elemento posto in una posizione x, da un array?io penso a System.arraycopy, dovrei farlo copiare dalla posiz 0, a z-1, e da z+1 alla fine dell array iniziale.
    l'array iniziale è nome, quello finale l'ho creato e chiamato tmpN, ma come si usa ora arraycopy?
    appena completo posto il codice
    L'array copy sarebbe la soluzione piu' elegante ma sinceramente ti consiglierei di seguire la soluzione proposta da Jam3s82, che praticamente e' quello che andresti a fare con l'arraycopy.
    http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#arraycopy(java.lang.Object, int, java.lang.Object, int, int)
    questo e' il link diretto alla sezione array copy ma credo che in parte lo conosci gia.
    supponiamo che src sia l'array da copiare
    dest sia l'array finale con voce eliminata
    e 'x' la posizione da elminare
    allora devi copiare prima da src incominciando dalla posizione 0 nel dest ricopiando iniziando da 0, per un numero di elementi equivalenti a x, dal momento che x e' l'elemento da eliminare tutto quello che sta prima (x-1) e' la lunghezza del primo pezzo.
    Mentre per il pezzo di array dopo la posizione da eliminare devi fare conti differenti.
    si deve copiare da src incominciando da (x+1) perche mi interessa da dopo l'elemento x, con dest partendo da x perche qui non ho piu l'elemento vuoto, con lunghezza pari a (src.length-(x+1)) trovo la lunghezza del pezzo di array dopo l'elemento da eliminare.
    Per eseguire questi tipo di lavori(giochi) ti consiglio di prendere sempre carta e penna e simulare prima manualmente registrando i passaggi che fai, ed eventualmente fare i passaggi a fotogrammi in modo da poter ricontrollare e facilitare la ricerca delgi errori nei passaggi. Io ho fatto cosi ora. E spero che ti funzioni.
Devi accedere o registrarti per scrivere nel forum
8 risposte