我正在使用此代码将详细信息插入二维数组。但是,当从数组中检索数据时,第一个元素值更改为 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/