0

このコードを使用して、TwoDimensional Array に詳細を挿入しています。ただし、配列からデータを取得しているときに、最初の要素の値が 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

何が起こっているのかわかりません。

助けてくれてありがとう..

4

2 に答える 2

4

ループの反復ごとに新しい配列を作成しています。

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

したがって、最初の反復では、配列を作成し、配列の最初の「行」に入力します。2回目の反復では、新しい配列(デフォルトではnull要素を持つ)を作成し、2番目の行に入力します。

ループの前に「外部」配列を1回割り当ててから、そのコンサルタントのプロジェクト名の数に基づいて「内部」配列を割り当てる必要があると思います。

 // 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("");
}
于 2012-05-25T12:07:56.383 に答える
0

次のことはできないことに注意してください。

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

理由は次のとおりです。

最初の行の後にprojectnameは配列の配列があります。

配列はオブジェクト参照であるため、オブジェクト参照の配列があります。

オブジェクト参照のデフォルト値はであるため、要素nullの配列があります。null

これはあなたができないことを意味します

projectname[i][j] = project_namecur.getString(3);  

に対応しているので

String[] row = projectname[i];
// row == null !
row[j] = project_namecur.getString(3);
于 2012-05-25T12:08:59.393 に答える