Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [JAVA] Aggiungere elementi a Object[][]

    Salve a Tutti... ho cercato soluzioni nel forum ma purtroppo senza successo, provato soluzioni in base alle mie scarne conoscenze Java, ma senza successo.

    Ho un Object[][] rowData di dimensioni:

    rowData.length = 8 e

    rowData[0].length = 620
    rowData[1].length = 620
    rowData[2].length = 620
    rowData[3].length = 620
    rowData[4].length = 620
    rowData[5].length = 620
    rowData[6].length = 620
    rowData[7].length = 620

    ... come posso aggiungervi l'Array insDati, così strutturarto: insDati.length = 8

    Ho provato a creare un Object di "passaggio" così:

    codice:
    int lunghezzaObj = rowData[0].length+1;
    Object[][] xObj = new Object[rowData.length][lunghezzaObj];
    per poi passargli i dati contenuti in rowData:
    codice:
    for (int y=0; y<(lunghezzaObj-1); y++) {
    	for (int i=0; i<xObj.length; i++) {
    		xObj[i][lunghezzaObj] = rowData[i][lunghezzaObj];
    		System.out.println("xObj ["+i+"]["+lunghezzaObj+"]: "+xObj[i][lunghezzaObj]);
    	}
    }
    Per poi assegnare all'ultimo indice di xObj i nuovi dati dell'Array insDati e ricopiare xObj in rowData:
    codice:
    xObj[0][lunghezzaObj] = insDati; <<<<<< questo va rivisto!!!!
    rowData = xObj;
    Ma evidentemente il procedimento è sbagliato, in quanto ho sempre degli errori!!!
    Grazie per l'attenzione e l'aiuto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Perdonami non ho capito ciò che vuoi ottenere: vuoi inserire un array di 8 elementi in una matrice 8x620, il che ovviamente si può fare in molti modi diversi, tu cosa vuoi ottenere? Vuoi copiare il primo elemento dell'array in tutta la prima riga della matrice, il secondo nella seconda e così via?

  3. #3
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Ti devi spiegare bene.
    Non è che sia immediato capire cosa significa "aggiungervi l' array insDati" in termini deterministici.
    E anche gli errori che hai, devi specificare che errori sono, altrimenti è impossibile aiutarti.

  4. #4
    Giustamente.... provo a spiegarmi meglio:

    Ho un Object[][], chiamato rowData, una matrice di otto colonne per n righe, nell'esempio sono arrivato a riempirla di dati per una lunghezza di 620 righe!! Il tutto avviene leggendo una tabella in un database Access. Cerco di farvi una rappresentazione:

    _____|colonna 0 | colonna 1 | colonna 2 | colonna 3 | colonna 4 | colonna 5 | colonna 6| colonna 7 |
    riga 0 | valore 00 | valore 01 | valore 02 | valore 03 | valore 04 | valore 05 | valore 06 | valore 07 |
    riga 1 | valore 10 | valore 11 | valore 12 | valore 13 | valore 14 | valore 15 | valore 16 | valore 17 |
    .....
    riga ... | valore ... | valore ... | valore ... | valore ... | valore ... | valore ... | valore ... | valore ... |
    ......
    riga620| valore 620/0| valore 620/1| valore 620/2| valore 620/3| valore620/4| valore 620/5| valore 620/6| valore 620/7|

    Avendo un Array di nome insDati di lunghezza 8, come posso inserirlo in coda all'Object[][] rowData!? cioè farlo diventare la riga 621, avendo il problema delle dimensioni predefinite dell'Object!!?

    Io ho usato questo procedimento, risolvendo anche l'errore (era una questione di indici SCORRETTI). Ma mi chiedo se esiste un metodo meno "macchinoso"!!!
    codice:
    public void refreshData(String[] insDati) {
    
    	int lunghezzaObj = rowData[0].length+1;
    	Object[][] xObj = new Object[rowData.length][lunghezzaObj];
    
    	for (int y=0; y<(rowData[0].length); y++) {
    		for (int i=0; i<xObj.length; i++) {
    			xObj[i][y] = rowData[i][y];
    		}
    	}
    		
    	for (int i=0; i<xObj.length; i++) {
    		xObj[i][lunghezzaObj-1] = insDati[i];
    	}
    	
    	rowData = xObj;
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Wolvy23
    Giustamente.... provo a spiegarmi meglio:

    Ho un Object[][], chiamato rowData, una matrice di otto colonne per n righe, nell'esempio sono arrivato a riempirla di dati per una lunghezza di 620 righe!! Il tutto avviene leggendo una tabella in un database Access. Cerco di farvi una rappresentazione:

    _____|colonna 0 | colonna 1 | colonna 2 | colonna 3 | colonna 4 | colonna 5 | colonna 6| colonna 7 |
    riga 0 | valore 00 | valore 01 | valore 02 | valore 03 | valore 04 | valore 05 | valore 06 | valore 07 |
    riga 1 | valore 10 | valore 11 | valore 12 | valore 13 | valore 14 | valore 15 | valore 16 | valore 17 |
    .....
    riga ... | valore ... | valore ... | valore ... | valore ... | valore ... | valore ... | valore ... | valore ... |
    ......
    riga620| valore 620/0| valore 620/1| valore 620/2| valore 620/3| valore620/4| valore 620/5| valore 620/6| valore 620/7|

    Avendo un Array di nome insDati di lunghezza 8, come posso inserirlo in coda all'Object[][] rowData!? cioè farlo diventare la riga 621, avendo il problema delle dimensioni predefinite dell'Object!!?

    Io ho usato questo procedimento, risolvendo anche l'errore (era una questione di indici SCORRETTI). Ma mi chiedo se esiste un metodo meno "macchinoso"!!!
    codice:
    public void refreshData(String[] insDati) {
    
    	int lunghezzaObj = rowData[0].length+1;
    	Object[][] xObj = new Object[rowData.length][lunghezzaObj];
    
    	for (int y=0; y<(rowData[0].length); y++) {
    		for (int i=0; i<xObj.length; i++) {
    			xObj[i][y] = rowData[i][y];
    		}
    	}
    		
    	for (int i=0; i<xObj.length; i++) {
    		xObj[i][lunghezzaObj-1] = insDati[i];
    	}
    	
    	rowData = xObj;
    }
    Quando bisogna aggiungere una riga, una colonna o un solo elemento (gli array bidimensionali possono non essere rettangolari) ad un array bisogna necessariamente riallocarlo, di lì non si scappa: in questi casi comunque non si usano più i semplici array ma ArrayList o Vector a seconda delle necessità (sempre che si voglia restare su una struttura dati indicizzata).

  6. #6
    Quindi il mio codice non va bene!!?

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Wolvy23
    Quindi il mio codice non va bene!!?
    Come ho detto, se prevedi che la struttura dati cambi dimensione ma necessiti comunque dell'accesso casuale, utilizza ArrayList (o Vector se ti serve una struttura thread-safe), almeno sono bufferizzate e non devi riallocare l'array ogni volta che inserisci una riga, operazione dispendiosa.
    Se sia corretto o meno non lo so, non l'ho guardato, visto che come sto dicendo lo imposterei in un'altra maniera.

  8. #8
    Però sembra funzionare!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Wolvy23
    Però sembra funzionare!!!
    Questo non significa che sia il modo migliore di farlo, ho detto solo che è un metodo inefficiente: così facendo ogni volta che aggiungi una riga devi riallocare tutta la "prima colonna" dell'array, che è un'operazione molto più dispendiosa di quello che potrebbe essere con un buffer, tutto qua. Se a te va bene, contento tu contenti tutti.

  10. #10
    OK, ma come faccio a creare una matrice ArrayList tipo Object[][] rowData che ho postato prima!?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.