java - 二维数组中的第一个元素变为空?

标签 java android arrays multidimensional-array null

我正在使用此代码将详细信息插入二维数组。但是,当从数组中检索数据时,第一个元素值更改为 null。

    Cursor consultancy = db.getConsultancy(this);
        if(consultancy!=null)
        {
            consultancy.moveToFirst(); 
            consultancy.moveToNext();  
            consultancynames = new String[(int) db.getConsultancyCount()-1];
            for(int i=0;i<db.getConsultancyCount()-1;i++)
            { 
                consultancynames[i] = consultancy.getString(2);  
                int consultantid = Integer.parseInt(consultancy.getString(consultancy.getColumnIndex(TimeAndExpensesLocalDB.CT_CONSULTANCYID))); 
                Cursor project_namecur = db.getProjectCode(this, consultantid);
                if(project_namecur!=null)
                {
                    project_namecur.moveToFirst();  
                    projectname = new String[(int) db.getConsultancyCount()][project_namecur.getCount()];
                    for(int j=0;j<project_namecur.getCount();j++)
                    {  
                        projectname[i][j] = project_namecur.getString(3);    
                        project_namecur.moveToNext();  
                    } 
                }
                consultancy.moveToNext();
            }  

        }  

        //... Print array  
        for (int i =0; i < consultancynames.length; i++) {
        for (int j = 0; j < projectname.length; j++) {
        System.out.print(" " + projectname[i][j]);
        }
        System.out.println("");
        }

输出

       05-25 12:58:22.700: I/System.out(2373):  null null null
       05-25 12:58:22.700: I/System.out(2373):  Other-1 Other-2 Other-3

我不确定发生了什么。

谢谢大家的帮助..

最佳答案

您在循环的每次迭代中创建一个新数组:

projectname = new String[(int) db.getConsultancyCount()][project_namecur.getCount()];

因此,在第一次迭代中,您将创建一个数组并填充数组的第一个“行”。在第二次迭代中,您将创建一个新数组(默认情况下具有空元素)并填充第二行。

我怀疑您需要在循环之前分配一次“外部”数组,然后根据该顾问有多少个项目名称分配“内部”数组:

 // Note: more idiomatic names would be consultancyNames and
 // projectNames. It's also unclear why you're subtracting one from the count...
 consultancynames = new String[(int) db.getConsultancyCount() - 1];
 projectnames = new String[consultancynames.length][];
 for (int i = 0;i< consultancenames.length; i++) {
     ...
     projectnames[i] = new String[project_namecur.getCount())];
     ...
 }

那么您还需要更改显示代码,例如至

for (int i =0; i < projectname.length; i++) {
    for (int j = 0; j < projectname[i].length; j++) {
        System.out.print(" " + projectname[i][j]);
    }
    System.out.println("");
}

关于java - 二维数组中的第一个元素变为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10754102/

相关文章:

java - 具有多行单元格渲染器的 JTable 打印非常奇怪

java - 我的 JavaCC 文本解析器中缺少什么?

Android TV 自定义演示器错误 : Do not setLayoutFrozen in layout or scroll

android - 如何在cardview中水平和垂直放置相等的空间

javascript - 如何获取 JSON 数组中的 JSON 对象名称

java - 根据要求具有多个键值的 Arrays.binarySearch

java - 通过 GAE 进行 http 请求时,GAE 是否缓存数据?

java - 如何更改 Jslider 值并传递给paintComponent?

android - 如何在android中为 slider 图像使用glide库

javascript - JavaScript 中是否有一种有效的算法可以在较大的数组集中查找不同数组的数量?