+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

Modificare lunghezza String[]

  1. #1
    Post
    46
    Like Inviati  
    0
    Like Ricevuti  
    0
    Salve a tutti. Ho realizzato questi due metodi per assegnare i nomi dei satelliti ai rispettivi pianeti (sto seguendo lo spunto della guida che sto leggendo):
    private String[] satelliti;
    ...
    //METODO IMPOSTAZIONE SATELLITI
            void setOrbiters (String... myOrbiters)  {
                satelliti = myOrbiters;  
            }
    
    e questo funziona. Poi ne ho creato uno per aggiungerne nel caso uno non lo facesse tutto in una volta (per esempio per dimenticanza):
    //METODO ADDIZIONE SATELLITI
             void addOrbiters (String... myOrbiters) {
                int i;
                for (i=0; i<myOrbiters.length; i++)
                    satelliti[satelliti.length+i] = myOrbiters[i];
            }
    
    e questo non funziona. L'errore, da quello che ho capito, è che non può aggiungere contenuti agli elementi satelliti[satelliti.length+i] perchè non esistono proprio (mentre in C, se non ricordo male, si poteva fare tranquillamente, perchè per lui quegli elementi esistevano con contenuto "null"). Come faccio a risolvere? Grazie.

  2. #2
    L'avatar di bumm
    bumm non è in linea Topo di biblioteca Ultimo blog: [VB2010] ComboBox ed Enumeratori
    Post
    2,140
    Blogs
    1
    Like Inviati  
    0
    Like Ricevuti  
    0
    Il problema è un altro.. non puoi ridimensionare l'array già inizializzato. Per risolvere, puoi creare un nuovo array e copiare i dati dl vecchio:
    int[] Arr1 = new int [3];
    
    Arr1[0] = 5;
    Arr1[1] = 2;
    Arr1[2] = 8;
    
    int[] Arr2 = new int[10];
    
    System.arraycopy (Arr1, 0, Arr2, 0, 3);
    
    Arr1 = Arr2;
    
    vedi anche la classe java.util.Vector (non è molto performante pero...)
    ℹ️ Leggi di più su bumm ...

  3. #3
    Post
    46
    Like Inviati  
    0
    Like Ricevuti  
    0
    Grazie mille.
    void addOrbiters (String... myOrbiters) {
    
                String[] newSatelliti = new String[satelliti.length+myOrbiters.length];
                System.arraycopy(satelliti, 0, newSatelliti, 0, satelliti.length);
                System.arraycopy(myOrbiters, 0, newSatelliti, satelliti.length, myOrbiters.length);
                satelliti = newSatelliti;
            }
    
    Così ho anche eliminato il metodo setOrbiters.
    Ultima modifica di simonesalerno; 09-08-2011 11:16 

  4. #4
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Post
    4,130
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao,

    Se non hai particolari esigenze di performance, prova davvero a ricorrere al Vector o a qualche contenitore più "avanzato" (LinkedList, ArrayList, ...).
    Uno String[] è molto più performante finché non lo devi ridimensionare troppo spesso (mi pare sia il tuo caso, ma è bene sottolineare che non è sempre e comunque la scelta migliore). Se il tuo programma chiamasse addOrbiters in continuazione forse la strategia con String[] e System.arraycopy non è la più adatta.

    In caso potresti, con molta attenzione, cercare di gestire le cose a chunk ed allocare N posizioni aggiuntive alla volta (marcando quelle non utilizzate con null ad esempio). In tal modo effettui una riallocazione dello String[] solo una volta ogni N inserimenti e mantieni il tutto più compatto. Una classettina apposita che usa internamente lo String[], tiene traccia della dimensione reale dell'array ed offre altri metodi di utilità potrebbe essere, tra l'altro, un'utile esercizio.

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  5. #5
    Post
    46
    Like Inviati  
    0
    Like Ricevuti  
    0
    Diciamo che ho un pò cambiato il metodo, perchè ho creato un array di oggetti (del tipo "pianeta", da me definito) per gestire gli Orbiters (che sono diventati pianeti), ma il principio funzionava anche come stava prima. Il codice è questo:
    static public pianeta[] Pianeti = {};
    ....
    static public void addPlanets(String...myNomi) { 
                int i;
                pianeta[] newPianeti = new pianeta[Pianeti.length+myNomi.length];
                for (i=0; i<Pianeti.length; i++)  //copia nel nuovo array gli elementi già presenti in Pianeti
                    newPianeti[i] = Pianeti[i];
                for (i=0; i<myNomi.length; i++) { //crea i nuovi elementi dell'array e ne imposta il Nome
                    newPianeti[Pianeti.length+i] = new pianeta();
                    newPianeti[Pianeti.length+i].Nome = myNomi[i];
                }
                Pianeti = newPianeti;  //questo mi permette di cambiare la lunghezza di Pianeti
    
    Non so come, ma scrivendo
    Pianeti = newPianeti;
    
    anche se i due array sono di dimensione diversa, riesco ad ottenere il risultato voluto. Grazie per l'aiuto.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 5
    Ultimo Post: 13-06-2014, 21:20
  2. lunghezza array
    Da lellalorella nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 01-10-2012, 20:32
  3. Lunghezza di una query
    Da clavi nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 15-03-2008, 12:39
  4. Lunghezza di una spaziatura tab
    Da Zigo nel forum C#
    Risposte: 2
    Ultimo Post: 01-06-2006, 09:57
  5. Lunghezza max textbox
    Da oilcrovara nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 12-05-2006, 15:04