[Java] JAVA modifica variabile di istanza

valesyle92
Salve , buona mattinata a tutti intanto :)
IN JAVA se un costruttore ha gia' inizializzato una variabile di istanza, poi essa si puo' modificare con un metodo di una classe ?
ad esempio se ho la classe Grafo con il relativo costruttore :

class Grafo {



private Double[][] matricediAdiacenza ; // matrice



public Grafo (int numeronodi, arco[] list ) { // COSTRUTTORE gli passo l'insieme degli archi del grafo e il numero di nodi
matricediAdiacenza=new Double[numeronodi][numeronodi];


for( int i = 0 ; i<= matricediAdicenza.length-1 ; i++){
for(int j = 0 ; j<= matricediAdiacenza.length-1;j++){

exist(i,j,list); // valuta se esiste oppure no l'arco...e se esite inserisce nella matrice il suo peso.






}}} CON QUESTO COSTRUTTORE IO HO INIZIALIZZATO LA MATRICE MA SE VOGLIO AGGIUNGERE UN NODO AL GRAFO
DEVO MODIFICARE " matriceDiAdiacenza" che e' gia' stata creata dal costruttore!! Quindi come faccio a modificarla?? Grazie :):) a tutti

Risposte
apatriarca
Semplicemente le assegni un nuovo valore nel metodo per aggiungere il nodo..

valesyle92
ma la lunghezza di quella matrice e' già stata creata!! quindi non posso assegnare alla matriceDiAdiacenza un nodo in piu....perchè con un array bidimensionale non si puo' modificare la lunghezza....

apatriarca
Devi creare un nuovo array con new e poi fare una copia..

valesyle92
pero' poi questa copia non posso assegnarla alla matriceDiAdiacenza... !

apatriarca
E perché non dovresti poterlo fare?

valesyle92
perchè il costruttore aveva gia' creato matriceDiAdiacenza con una lunghezza pari al numero dei nodi...
quindi se io assegno a matriceDiAdiacenza la copia.... e' una cosa che non posso fare perchè la copia ha un nodo in piu quindi anche una riga e una colonna in piu!

apatriarca
Ma hai provato a farlo?

apatriarca
Sbagli nel fatto che non puoi modificare la dimensione di una singola istanza di un array, ma nulla ti vieta di creare una nuova istanza e assegnarla alla stessa variabile di prima.. Per esempio:
arr = new double[10];
// fai quello che devi con l'array in dimensione 10.. 
// .. dopo un po'.. 
arr = new double[15];
// adesso arr ha dimensione 15.. 

Ovviamente il problema è che facendo in questo modo perdi l'array precedente per cui quello che devi fare è a grandi linee qualcosa come il seguente:
double[][] new_array = new double[numeronodi+1][numeronodi+1];
for (...) {
    for (...) {
        new_array[i][j] = matricediAdicenza[i][j];
    }
}
// qui poi gestisci le nuove rige e colonne come devi..
// infine riassegni la matrice
matriceAdiacenza = new_array;

Se no puoi usare un ArrayList di ArrayList e ti risolvi tutti i tuoi problemi.

valesyle92
ahhhhh GRazie milleee!! Ho capito !!!! grande!!! :):);)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.