我正在编写一个代码,我必须在2d数组中添加1d数组。 例如:我有一个用户列表数组,它将在其中添加数据数组
Double[][] userList = new Double[4][appName.size()];
Double[] data = new Double[appName.size()];
因此用户列表将具有以下内容:
userlist={{1,2,3,4}, {2,3,4,7}, {0,0,1,2,}}
其中{1,2,3,4}
===>表示数据数组。
问题:我得到的问题是,每次返回的数据都只是用新数据覆盖用户列表中的整个内容。
例如:
if userlist={{1,2,3,4}, {2,3,4,7}} and data returns {0,0,4,5}
then my userlist becomes: {{0,0,4,5}, {0,0,4,5}, {0,0,4,5} }.
代码:
Double[][] userList = null;
userList = new Double[4][appName.size()];
String prevName = null;
Double[] data = new Double[appName.size()];
int count=0;
for(AuditInformationEntity e : auditInfoList)
{
//int count =0;
if(prevName== null || !prevName.equals(e.getDisplayName()) )
{
if(prevName!=null)
{
////====>> I think Something to be done here<========/////
userList[count++]=data;
}
//data = new ArrayList<Double>();
for(int i = 0 ; i<appName.size();i++)
data[i]=0d;
prevName = e.getDisplayName();
}
Double d = data[appName.indexOf(e.getAppName())];
if(d==null){
d=1d;
data[appName.indexOf(e.getAppName())]= d;
}
else
{
d++;
data[appName.indexOf(e.getAppName())]= d;
}
}
userList[count++]=data;
return userList;
答案 0 :(得分:1)
您已正确识别问题行。从技术上讲,Java不具有多维数组;相反,它有 数组的数组。这意味着,当您说userList[i] = data
时,您只是告诉Java更新userList[i]
的引用以指向相同的data
数组。 (这称为别名错误,因为你认为你正在处理不同的数组,但你只是用不同的名称调用相同的数组。)
相反,在这种情况下,最好这样做:
int i;
double userList[][] = new double[numberOfArrays][];
double data[] = new double[4];
...
// inside a loop
// read into data
userList[i] = Arrays.copyOf(data);
创建userList
时,实际上并不分配内部4元素数组;当您添加data
数组时,它会复制每个版本的{{1}}数组。