Come creare array di stringhe a due dimensioni?

di il
5 risposte

Come creare array di stringhe a due dimensioni?

Salve a tutti,
sono agli inizi con Java e vorrei un suggerimento per creare un oggetto tipo un vettore bidimensionale che, per ogni riga,contiene una stringa relativa al nome di un animale e un' altra stringa che contiene la descrizione di quell' animale, per esempio:

cane			animale a 4 zampe con una coda, appartenente ai canidi
gatto			felino con 4 zampe ed una coda
elefante		animale dotato di una proboscide e 4 zampe
mucca		animale da stalla, produttore di latte
praticamente ho un file .jsp nel quale viene richiamato un metodo di una classe (che si trova in un package) e mi devono essere restituiti le stringhe dei nomi degli animali con le relative stringhe delle descrizioni, in modo che poi possa presentare il tutto in una tabella (nel file .jsp).

1) E' possibile creare un metodo i cui parametri vengano passati per riferimento e non per valore, come permette di fare il C? In questo modo passerei come parametri due vettori di stringhe.
2) E' possibile creare un ArrayList di stringhe a 2 dimensioni? Come dichiararlo? E come inserire il nome dell' animale e la sua descrizione? In questo modo potrei usare questo ArrayList di stringhe a 2 dimensioni come valore di ritorno del metodo.

Se avete altre soluzioni migliori e più efficienti, ditemi pure.

5 Risposte

  • Re: Come creare array di stringhe a due dimensioni?

    Salva ha scritto:


    Se avete altre soluzioni migliori e più efficienti, ditemi pure.
    Se la struttura bidimensionale non ti è stata chiesta/imposta per un qualche motivo (es. didattico?), allora non ha granché senso.
    La soluzione migliore è ragionare in termini di programmazione ad oggetti: una classe "bean" che modella l'animale con nome e descrizione.

    public class Animale {
        private String nome;
        private String descrizione;
    
        // costruttore/i, metodi getter/setter, ecc....
    }
    Quindi alla JSP farai arrivare un attributo nel request scope che è un List<Animale> (ovviamente l'oggetto reale sarà una implementazione concreta, es. un ArrayList<Animale>)
  • Re: Come creare array di stringhe a due dimensioni?

    Si, effettivamente è la soluzione migliore.
    Questo è il codice che ho aggiunto per implementare quanto detto; per testare che sia tutto ok ho implementato il ciclo while nella classe .java, ed ecco il risultato finale:
    
    ...
    ArrayList<Animale> lista = new ArrayList<Animale>();
    ...
    ListIterator<Animale> iteratore = lista.listIterator();//creo l' oggetto iteratore sulla lista
    while (iteratore.hasNext())
    		{
    			Animale element = iteratore.next();
    			String nome = "";
    			String descrizione = "";
    			nome = element.get_name();
    			descrizione = element.get_descr();
    			System.out.println(nome);
    			System.out.println(descrizione);
    		}
    	}
    }
    
    Sembra che il tutto funzioni.
    Una domanda: perchè per creare l' oggetto iteratore sulla lista, non mi è servita la keyword "new"? Da Javadoc ho visto che listIterator() è un metodo implementato dalla classe ArrayList<E> (dove E è la classe Animale nel mio caso) e restituisce oggetti di tipo iteratore su lista di oggetti E, ovvero ListIterator<E>.
  • Re: Come creare array di stringhe a due dimensioni?

    Salva ha scritto:


    perchè per creare l' oggetto iteratore sulla lista, non mi è servita la keyword "new"?
    Perché l'oggetto che implementa ListIterator è istanziato dentro ArrayList e la classe che lo implementa è sicuramente interna e nascosta dentro ArrayList. Gli iteratori, in generale, sfruttano dettagli implementativi interni alla collezione, che appunto solo la collezione conosce. Quindi non sei tu a poter istanziare l'iteratore e per questo devi appunto invocare un metodo (iterator() o listIterator()) per avere una istanza dell'iteratore.

    P.S. invece di usare Iterator o ListIterator esplicitamente puoi anche usare il "for-each" di Java 5:
    for (Animale element : lista) {
        // usa element
    }
  • Re: Come creare array di stringhe a due dimensioni?

    Cioè se sto seguendo correttamente il tuo discorso, vuoi dire che all' interno del metodo sarà presente una istruzione con la keyword "new" che istanzierà l' oggetto che verrà poi restituito dal metodo?

    Si, molto interessante anche il for-each!!!
  • Re: Come creare array di stringhe a due dimensioni?

    Salva ha scritto:


    vuoi dire che all' interno del metodo sarà presente una istruzione con la keyword "new" che istanzierà l' oggetto che verrà poi restituito dal metodo?
    Sì, esatto. E il new su una classe che sicuramente tu dall'esterno della collezione NON puoi "vedere".
Devi accedere o registrarti per scrivere nel forum
5 risposte