私はjavaのnoobですが、私はC++の知識があるので、その考え方でループを作成しました。 DBからテーブルの名前を含む2つの配列からデータを取得しようとしています。いずれかの表のいずれかの要素が別の表の要素と等しい場合は、両方の表の両方の名前が別の配列に保存されます。これは、配列が終了するまで発生します。さて、いくつかの問題によって、各カーソルには同じテーブルが何度も含まれていますが、私はそれを世話したと思います。 ここでは、以下のロジックを使用して、1つまたは2つの異なる表のペアを取得する必要がありますが、代わりに、同じペアを何度も何度も繰り返しています。私はループの順序とロジックを何度も変更していますが、この構成は少なくとも結果をもたらします。 問題は構文の代わりに論理的だと思います。どこで私は間違えましたか?ANDROID、JAVA:カーソルとループで重複した結果を得る
私のコードは次のとおりです。
int maa;
for (int i = 0; i < ArraySource.size(); i++) {
// cursor for source
Cursor sourceCursor = myDB.rawQuery("SELECT * FROM '" + ArraySource.get(i) + "';", null);
int sourceIndex = sourceCursor.getColumnIndex("Stop");
for (int ii = 0; ii < ArrayDest.size(); ii++) {
// counter for finding match
maa=0;
Cursor destCursor = myDB.rawQuery("SELECT * FROM '" + ArrayDest.get(ii) + "';", null);
int destIndex = destCursor.getColumnIndex("Stop");
sourceCursor.moveToFirst();
String nameSource = sourceCursor.getString(sourceIndex);
destCursor.moveToFirst();
String nameDest = destCursor.getString(destIndex);
// data is repeated many times in the cursor, so this is hack to take the first result and check with every result
// so if match is found loop is broken
// But to do that first result should be taken out of loop, hence the following
// First result of first cursor checking with first result of second cursor
if (nameSource.equals(nameDest)){
IndirectArray1.add(ArraySource.get(i));
IndirectArray2.add(ArrayDest.get(ii));
maa=1;
}else {
//checking with all results of second cursor
for (destCursor.moveToNext(); !destCursor.isAfterLast(); destCursor.moveToNext()) {
if(nameDest.equals(destCursor.getString(destIndex))){
break;
}
if (nameSource.equals(destCursor.getString(destIndex))) {
IndirectArray1.add(ArraySource.get(i));
IndirectArray2.add(ArrayDest.get(ii));
maa=1;
break;
}
}
}
// condition for running nexr for loop above logic is used in following loop
if(maa ==0){
MsMoot:
for (sourceCursor.moveToNext(); !sourceCursor.isAfterLast(); sourceCursor.moveToNext()) {
destCursor.moveToFirst();
if (nameSource.equals(sourceCursor.getString(sourceIndex))) {
break;
}
if (sourceCursor.getString(sourceIndex).equals(destName)) {
IndirectArray1.add(ArraySource.get(i));
IndirectArray2.add(ArrayDest.get(ii));
break;
}else {
for (destCursor.moveToNext(); !destCursor.isAfterLast(); destCursor.moveToNext()) {
if (destCursor.getString(destIndex).equals(nameDest)) {
break;
}
if (sourceCursor.getString(sourceIndex).equals(destCursor.getString(destIndex))) {
IndirectArray1.add(ArraySource.get(i));
IndirectArray2.add(ArrayDest.get(ii));
break MsMoot;
}
}
}
}
// closing cursors
}destCursor.close();
}sourceCursor.close();
}
、このループはそうでsecondlistのすべての結果にfirstlistの第二の結果、その後、secondlistのすべての結果にfirstlistの最初の結果をチェックします。 firstループのすべての結果に対して、jループの上に余分なループを置くべきですか? –
私は自分の答えを更新しました。 – grabarz121
それは働いた!論理に感謝します。あなたのソリューションは100以上の全体的な回線を節約しました。 –