Привет я использовать HashMap, содержащий целые числа в качестве ключей и списка матрицы в качестве значений, здесь кодHashMap, содержащие то же значение
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import Jama.Matrix;
public class KFold {
public static HashMap<Integer,List<Matrix>> splitterDonnees(Matrix matReduite){
int K =10;
int unite = matReduite.getRowDimension()/K;
int indexDebtest = 0;
int indexFinTest = unite;
Matrix matDonEntr = new Matrix(matReduite.getRowDimension()-unite,matReduite.getColumnDimension());
Matrix matDonTest = new Matrix(unite,matReduite.getColumnDimension());
HashMap<Integer,List<Matrix>> mapDonn = new HashMap<Integer,List<Matrix>>();
for (int i =0;i<K;i++){
int ireloaded = 0;
int ireloadedEntr =0;
for(int ii =indexDebtest; ii<indexFinTest;ii++){
int jreloaded=0;
for(int j =0;j<matReduite.getColumnDimension();j++){
matDonTest.set(ireloaded, jreloaded, matReduite.get(ii, j));
jreloaded++;
}
ireloaded++;
}
//matDonTest.print(10, 5);
if(indexDebtest == 0){
for(int ii =unite;ii<matReduite.getRowDimension();ii++){
int jreloadedEntr=0;
for(int j =0; j<matReduite.getColumnDimension();j++){
matDonEntr.set(ireloadedEntr, jreloadedEntr, matReduite.get(ii, j));
jreloadedEntr++;
}
ireloadedEntr++;
}
}
else if (indexFinTest==matReduite.getRowDimension()){
for(int ii =0;ii<matReduite.getRowDimension()-unite;ii++){
int jreloadedEntr=0;
for(int j =0; j<matReduite.getColumnDimension();j++){
matDonEntr.set(ireloadedEntr, jreloadedEntr, matReduite.get(ii, j));
jreloadedEntr++;
}
ireloadedEntr++;
}
}
else{
for(int ii=0;ii<indexDebtest;ii++){
int jreloadedEntr=0;
for(int j =0; j<matReduite.getColumnDimension();j++){
matDonEntr.set(ireloadedEntr, jreloadedEntr, matReduite.get(ii, j));
jreloadedEntr++;
}
ireloadedEntr++;
}
for(int ii =indexFinTest;ii<matReduite.getRowDimension();ii++){
int jreloadedEntr=0;
for(int j =0; j<matReduite.getColumnDimension();j++){
matDonEntr.set(ireloadedEntr, jreloadedEntr, matReduite.get(ii, j));
jreloadedEntr++;
}
ireloadedEntr++;
}
}
indexDebtest = indexDebtest+unite;
indexFinTest = indexFinTest+unite;
List<Matrix> coupleMatTest_MatEntr = new ArrayList<Matrix>();
coupleMatTest_MatEntr.add(matDonTest);
//matDonTest.print(10, 5);
coupleMatTest_MatEntr.add(matDonEntr);
mapDonn.put(i, coupleMatTest_MatEntr);
//System.out.println("Les lements tests de mapDonnees sont:"+mapDonn.get(i).size());
mapDonn.get(i).get(0).print(10, 5);
}
//mapDonn.get(0).get(0).print(10, 5);
//mapDonn.get(1).get(0).print(10, 5);
return mapDonn;
}
}
Проблема заключается в том, что окончательная версия HashMaps, которые возвращаются содержит в 10 раз та же самая последняя матрица, дело в том, что она хорошо работает в цикле, так как я вижу разные значения каждый раз, но как только я печатаю значения непосредственно перед возвратом, все значения теперь имеют одинаковую последнюю матрицу.
EDIT: Класс Matrix - это пакет Jama.
Класс Matrix - это класс, представляющий собой пакет jama. – user2133558
Хорошо, проблема в том, что вы не создаете 'новые' матрицы внутри цикла, вы только редактируете существующие экземпляры. – jlordo
Спасибо, что разрешено. – user2133558