Ghepardo
28-04-2005, 17:39
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 ^_^.
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 ^_^.