2

我正在编写一个代码,我必须在二维数组中添加一个一维数组。例如:我有一个用户列表数组,它将在其中添加数据数组

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;
4

1 回答 1

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);

当您创建时,这实际上并没有分配内部 4 元素数组userListdata添加数组时,它会复制每个版本的数组。

于 2013-09-20T09:08:33.630 回答