在java中的2d数组中添加1d数组

时间:2013-09-20 08:54:17

标签: java arrays

我正在编写一个代码,我必须在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;

1 个答案:

答案 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}}数组。