|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Roma
Messaggi: 963
|
[JAVA] Aiuto Side effect
Ciao ragazzi. Sto facendo un metodo che aggiunge righe ad una matrice. Praticamente voglio fare che l'oggetto su cui venga fatto il cambiamento sia l'oggetto che ha invocato il metodo, però se alla fine del mio metodo scrivo:
this = m; in cui m è la nuova matrice che ho creato dentro al metodo, mi da ovviamente errore. Come posso fare? Vi incollo il metodo da me scritto e ve lo spiego: public void addRow(java.util.Vector v) throws IllegalRowException { if(v.size() != this.numColumns()) { throw new IllegalRowException("Incorrect input row size Exception"); } java.util.Vector vectors = new Vector(); int colPointer, rowPointer, vectorPointer, vectorPointer2; //this cicle builds a vector of vectors containing the column of 'this' matrix for(colPointer=0; colPointer<this.numColumns(); colPointer++) { java.util.Vector a = new Vector(); for(rowPointer=0; rowPointer<this.numRows(); rowPointer++) { a.addElement(this.get(rowPointer, colPointer)); } vectors.addElement(a); } /* System.out.println("Insieme dei vettori delle colonne prima dell'aggiunta della nuova riga"); System.out.println(vectors.toString()); */ //this cicle add the new row values to the list of column in 'vectors' for(vectorPointer=0; vectorPointer<v.size(); vectorPointer++) { double kk = (Double) v.elementAt(vectorPointer); Vector vv =(Vector) vectors.elementAt(vectorPointer); vv.addElement( (Double) v.elementAt(vectorPointer)); } /* System.out.println("Insieme dei vettori delle colonne dopo l'aggiunta della nuova riga"); System.out.println(vectors.toString()+" "+"Size = "+vectors.size()); System.out.println(); */ //now in 'vectors' there is all the new matrix, the next cicle will build a new //matrix from 'vectors' DSDenseMatrix mm = new DSDenseMatrix(this.numRows()+1, this.numColumns()); int vectorColPointer, vectorRowPointer; for(vectorColPointer=0; vectorColPointer<vectors.size(); vectorColPointer++) { java.util.Vector aa = new Vector(); aa = (Vector) vectors.elementAt(vectorColPointer); for(vectorRowPointer=0; vectorRowPointer<aa.size(); vectorRowPointer++) { double jj = (Double) aa.elementAt(vectorRowPointer); mm.add(vectorRowPointer,vectorColPointer,jj); } } } Non fate caso ai println commentati, sono di debug Comunque: questo metodo prende un vettore come argomento (scrivo java.util.vector perchè nel package che devo usare per le matrici è definita una classe vector), poi prende la matrice che ha invocato il metodo (this) e la spara dentro un vettore di vettori, in cui ogni vettore rappresenta una colonna. Poi aggiunge i nuovi valori della nuova riga ai vettori delle colonne e rischiaffa tutto dentro una nuova matrice (mm). Ora il mio problema è che non so come fargli fare sideeffect. Spero qualcuno sia in grado di aiutarmi ^_^. Grazie anticipatamente! p.s. non fate caso al nome della classe etc, è tutto inventato ^_^.
__________________
Asus P5K-E WiFi | Intel Core 2 Due E8400 | 4*1gb ram Kingston | MSI GeForce 9800GTX 512Mb | Tagan X-Eye II 600watt | Win7 Business 64bit Ultima modifica di Ghepardo : 28-04-2005 alle 18:42. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2596
|
Premetto che sto imparando, quindi rischio di sparare qualche grossa ca22ata; ma scrivo lo stesso
Per cambiare lo stato del tuo "this" dovresti sapere come è fatto... no?... cioè, tu puoi vedere il costruttore? il sorgente, dico. Dovrai pur sapere qualcosa sul suo stato per cambiarlo... dovrai poter avere accesso a qualche suo attributo... ![]() (p.s.: definisci un double kk che non usi)
__________________
Sono GULDO, non Guido! Cioè, certo che guido... Bé, insomma, avete capito ![]() Linux 2.6.26|Debian|Debian@Hwupgrade|Debian Clan|Solo Puffin ti darà forza e grinta a volontà! NERD rank 62|Milla Jovovich|大事な物はいつも形の無い物だけ Sito e Forum sul Giappone|La mia libreria su aNobii |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Roma
Messaggi: 963
|
L'unico modo per fare side effect che io conosca è accedere alle variabili di istanza dell'oggetto, però nn posso perchè non sono modificabili. Mi sa che da dentro al metodo non si può fare side effect.
__________________
Asus P5K-E WiFi | Intel Core 2 Due E8400 | 4*1gb ram Kingston | MSI GeForce 9800GTX 512Mb | Tagan X-Eye II 600watt | Win7 Business 64bit |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:40.




















