[Java] JAVA modifica variabile di istanza
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

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

Risposte
Semplicemente le assegni un nuovo valore nel metodo per aggiungere il nodo..
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....
Devi creare un nuovo array con new e poi fare una copia..
pero' poi questa copia non posso assegnarla alla matriceDiAdiacenza... !
E perché non dovresti poterlo fare?
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!
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!
Ma hai provato a farlo?
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:
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:
Se no puoi usare un ArrayList di ArrayList e ti risolvi tutti i tuoi problemi.
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.
ahhhhh GRazie milleee!! Ho capito !!!! grande!!!
:);)
