我有这个:
String [][] population = new String[indexOfChromosomes][indexOfGens];
for(int chromosomesNumber = 0; chromosomesNumber <= indexOfChromosomes ; chromosomesNumber++){
for(int gensNumber = 0; gensNumber <= indexOfGens ; gensNumber++){
Cursor r = db.rawQuery("SELECT _id, key_foodstuff, key_calorie, key_carbohydrate, key_fat,
key_protein FROM (food INNER JOIN categories ON food.key_nocategory =
categories.nocategories) WHERE key_type='primary'
AND _id!=164 ORDER BY RANDOM() LIMIT 1", null);
if(r.moveToFirst()){
population[indexOfChromosomes][indexOfGens] = r.getString(0);
}
}
}
我运行此代码时遇到错误: population [indexOfChromosomes] [indexOfGens] = r.getString(0);
我想问一下,我如何将光标r放在数组2维上? THX
答案 0 :(得分:1)
看起来错误就在这里:
String [][] population = new String[indexOfChromosomes][indexOfGens];
for(int chromosomesNumber = 0; chromosomesNumber <= indexOfChromosomes ; chromosomesNumber++){
for(int gensNumber = 0; gensNumber <= indexOfGens ; gensNumber++){
数组的大小为indexOfChromosomes
x indexOfGens
,因此当您尝试访问索引0..indexOfChromosomes-1
和{时,它的索引为0..indexOfGens-1
和indexOfChromosomes
{1}}。
应该是
indexOfGens
答案 1 :(得分:0)
根据你编写代码的方式,它看起来像你的for循环
population[indexOfChromosomes][indexOfGens]
应该是
population[chromosomesNumber][gensNumber]
答案 2 :(得分:0)
你的方法让我困惑。我不太了解SQL,但看起来你反复随机查询数据库中的一行。我读过这是一项代价高昂的操作。我认为你最好在开始时获取完整的数据集,然后重复一遍。
indexOfChromosomes和indexOfGens如何与数据库&#34; foodstuff&#34;等等?我没有看到连接...
这可以从我自己的方法修改,在Android中运行良好。如果rawQuery有效,那么整个批次应该是:
// The order of this array will affect final array
// I would also use this array in the query itself
String[] columnNames = {
"_id", "key_foodstuff", "key_calorie", "key_carbohydrate", "key_fat", "key_protein"
};
Cursor r = db.rawQuery("SELECT _id, key_foodstuff, key_calorie,
key_carbohydrate, key_fat, key_protein FROM (food INNER JOIN
categories ON food.key_nocategory = categories.nocategories)
WHERE key_type='primary' AND _id!=164", null);
int rowCount = r.getCount();
int columnCount = columnNames.length;
// create the required array with appropriate dimensions
String[][] array = new String[rowCount][columnCount];
// begin iterating over the cursor
if (r.moveToFirst()) {
int row = 0;
do {
// for each row of the cursor, get the values from all
// of the columns
for (int column = 0; column < columnCount; column++) {
array[row][column] = cursor.getString(cursor.
getColumnIndex(columnNames[column]));
}
row++;
} while (r.moveToNext());
}