Vai a precedente in rubrica polimorfa

di il
5 risposte

Vai a precedente in rubrica polimorfa

Salve a tutti, sto cercando di creare una rubrica e questo è il testo:
GESTIONE RUBRICA POLIMORFA
Scrivete le classi necessarie per gestire una rubrica adatta a contenere sia contatti privati che di lavoro.
La classe principale, che potete chiamare Rubrica, conterrà tutte le strutture dati e i metodi necessari alla gestione della rubrica. In particolare un oggetto della classe Rubrica conterrà i contatti e i metodi per aggiungere, modificare, rimuovere o visualizzare un contatto, per spostarsi avanti e indietro nella rubrica, per stampare tutto e per cancellare tutto. Per semplicità non è richiesto che i contatti siano memorizzati in ordine alfabetico per cui l’inserimento di nuovi contatti può essere effettuato dove viene più comodo.
I contatti memorizzabili nella rubrica possono essere di due tipi, privato e lavoro con caratteristiche leggermente differenti.
Potete pensare a una classe Contatto, che conterrà nome, cognome e email, da cui derivano la classe Privato (che in aggiunta avrà cellulare e id skype), e la classe Lavoro (che in aggiunta avrà fax e partita IVA). Tutti i dati possono essere di tipo String.
Prevedete per le classi Privato e Lavoro un metodo modifica() per la modifica interattiva dei dati e il metodo toString().
Prevedete inoltre per le classi Contatto, Privato e Lavoro tutti i metodi e i costruttori che ritenete opportuni.
Per testare la vostra classe, scrivete un programma che crea un oggetto della classe Rubrica e visualizza, dentro un loop infinito, un menu con le seguenti opzioni:
a) Aggiungi contatto privato
b) Aggiungi contatto lavoro
c) Elimina contatto corrente
d) Modifica contatto corrente
e) Visualizza contatto corrente
f) Vai al prossimo
g) Vai al precedente
h) Stampa tutto
i) Cancella tutto
j) Esci
E visto che sto usando una linkedlist, come potrei implementare le opzioni f e g?
Ho provato a fare così per g) ma non va...

			public void vaiPrecedente(){
				ListIterator<Contatto> listIter = elenco.listIterator();
				while (listIter.hasNext())
					if(listIter.hasPrevious())
						System.out.println(listIter.previous());
			}

5 Risposte

  • Re: Vai a precedente in rubrica polimorfa

    alexander1789 ha scritto:


    E visto che sto usando una linkedlist, come potrei implementare le opzioni f e g?
    Il concetto di "prossimo"/"precedente" dovrebbe essere rispetto o ad un indice o ad un riferimento ad un oggetto "corrente". Quindi nel tuo caso cosa sarebbe la indicazione del contatto "corrente"?
  • Re: Vai a precedente in rubrica polimorfa

    andbin ha scritto:


    Il concetto di "prossimo"/"precedente" dovrebbe essere rispetto o ad un indice o ad un riferimento ad un oggetto "corrente". Quindi nel tuo caso cosa sarebbe la indicazione del contatto "corrente"?

    Anche se sbagliato, io per adesso sto considerando come "corrente" l'ultimo contatto che assegno alla rubrica e quindi in teoria, se dovessi dargli 3 contatti vorrei che tornasse indietro al secondo e che lo stampasse.

    Comunque questo è il codice di rubrica:
     package it.****.community.*********.prg.rubrica;
    import java.util.*;
    import java.io.*;
    
    public class Rubrica {
    	
    	private LinkedList<Contatto> elenco;
    	private int corrente;
    	
    	public Rubrica()
    	{
    		elenco = new LinkedList<Contatto>();
    		corrente = -1;
    	}
    	
    	public void aggiungiContatto(Contatto contatto)
    	{
    	    elenco.add(contatto);
    	    corrente +=1;
    	}
    	
    	public void eliminaContattoCorrente()
    	{
    		if (corrente != -1) {
    		System.out.println("Il contatto " + elenco.remove(corrente) + " è stato rimosso correttamente");
    		aggiornaCorrente();
    		}
    		return;
    	}
    	public void vaiPrecedente(){
    		/*//if(corrente != -1){
    			ListIterator<Contatto> listIter = elenco.listIterator(0);
    			while (listIter.hasNext())
    				if(listIter.hasPrevious())
    					System.out.println(listIter.previous());*/
    		Contatto prev = null;
    		for (Contatto c : elenco){
    			if(elenco.equals(o))
    		}
    					
    			
    	}
    	    
    	public void vaiProssimo()
    	{
    	    
        }
    	
    	public void aggiornaCorrente(){
    	    int c;
    	    c=corrente;
    	    vaiProssimo();
    	    if(c==corrente){ // se non c'e' un prossimo cerca il precedente
    	        vaiPrecedente();
    	        if(c==corrente) // se non c'e' neanche un precedente
    	            corrente=-1;
    	    }
    	}
    	
    	public void stampaCorrente()
    	{
    		if(corrente != -1){
    			System.out.println(elenco.get(corrente));
    		}
    		
    	}
    	
    	public void stampaTutto()
    	{
    		System.out.println("Contatti: " + elenco.size());
    		
    		//System.out.println(elenco.toString());
    		 for(Contatto d:elenco) {
    	            System.out.println(d);
    	        }
    	}
    }
    
    Mentre questo quello del main:
    package it.****.community.************.prg.rubrica;
    import java.util.*;
    import java.io.*;
    
    public class Main {
    	public static void main(String args[]) throws IOException
    	{
    		Rubrica rubr = new Rubrica();
    		Contatto contatto = null;
    		int scelta = -1;
    		try (InputStreamReader ir = new InputStreamReader(System.in);
    				BufferedReader in = new BufferedReader(ir))
    		{
    			while (scelta != 0)
    			{
    			
    				System.out.println("1) Aggiungi contatto privato");
    				System.out.println("2) Aggiungi contatto lavoro");
    				System.out.println("3) Elimina contatto corrente");
    				System.out.println("4) Modifica contatto corrente");
    				System.out.println("5) Visualizza contatto corrente");
    				System.out.println("6) Vai al prossimo");
    				System.out.println("7) Vai al precedente");
    				System.out.println("8) Stampa tutto");
    				System.out.println("9) Cancella tutto");
    				System.out.println("0) Esci");
    				
    				scelta = Integer.parseInt(in.readLine());
    				switch(scelta)
    				{
    				case 1:
    					contatto = new Privato();
    					contatto.visualizza_Nominativi();
    					rubr.aggiungiContatto(contatto);
    					break;
    					
    				case 2:
    					contatto = new Lavoro();
    					contatto.visualizza_Nominativi();
    					rubr.aggiungiContatto(contatto);
    					break;
    					
    				case 3: 
    					rubr.eliminaContattoCorrente();
    					break;
    				
    				case 4:
    					
    					break;
    					
    				case 5:
    					rubr.stampaCorrente();
    					break;
    					
    				case 6:
    					rubr.vaiProssimo();
    					break;
    					
    				case 7:
    					rubr.vaiPrecedente();
    					break;
    					
    				case 8:
    					rubr.stampaTutto();
    					break;
    					
    				case 0:
    					return;
    					
    				}
    				
    			}
    		} 
    	}
    
    }
    
  • Re: Vai a precedente in rubrica polimorfa

    Se tieni referenziato un oggetto Contatto che è quello "corrente", con una semplice iterazione puoi facilmente trovare sia il precedente, sia il successivo nella lista.
  • Re: Vai a precedente in rubrica polimorfa

    E mi potresti fare un esempio su come farlo?
  • Re: Vai a precedente in rubrica polimorfa

    alexander1789 ha scritto:


    E mi potresti fare un esempio su come farlo?
    Prova a pensare così. Hai un riferimento contattoCorrente da qualche parte. Usi poi un'altra variabile contattoPrecedente (inizialmente null). Quindi fai una iterazione sulla lista. Appena trovi quello stesso oggetto del contattoCorrente, fai un break per uscire subito dal ciclo altrimenti lo assegni come contattoPrecedente. Quando trovi il contatto, il contattoPrecedente è proprio quello "precedente".
Devi accedere o registrarti per scrivere nel forum
5 risposte