Ниже приведена функция в моем коде:
private static List<String> formCrfLinesWithMentionClass(int begin, int end, String id,
List<String> mList, int mListPos, List<String> crf) {
List<String> crfLines = crf;
int yes = 0;
mListPosChanged = mListPos;
//--------------------------------------------------------------------------
for (int crfLinesMainIter = begin; crfLinesMainIter < end; ) {
System.out.println(crfLines.get(crfLinesMainIter));
//---------------------------------------------------------------------------
//the total number of attributes without orthographic features
//in a crfLine excluding the class attribute is 98
if (!crfLines.get(crfLinesMainIter).equals("") && crfLines.get(crfLinesMainIter).split("\\s").length == 98) {
//in mList parenthesis are represented by the symbol
//in crfLines parenthesis are represented by -LRB- or -RRB-
//we make a check to ensure the equality is preserved
if(val.equals(crfLines.get(crfLinesMainIter).split("\\s")[0])) {
yes = checkForConsecutivePresence(crfLinesMainIter, mList, mListPos, id, crfLines);
if (yes > 0) {
mListPosChanged += yes;
System.out.println("formCrfLinesWithMentionClass: "+mListPosChanged);
for (int crfLinesMentionIter = crfLinesMainIter;
crfLinesMentionIter < crfLinesMainIter + yes;
crfLinesMentionIter++) {
String valString = "";
if (crfLinesMentionIter == crfLinesMainIter) {
valString += crfLines.get(crfLinesMentionIter);
valString += " B";
crfLines.add(crfLinesMentionIter, valString);
}
else {
valString += crfLines.get(crfLinesMentionIter);
valString += " I";
crfLines.add(crfLinesMentionIter, valString);
}
}
crfLinesMainIter += yes;
}
else {
++crfLinesMainIter;
}
}
else {
++crfLinesMainIter;
}
}
else {
++crfLinesMainIter;
}
}
return crfLines;
}
Проблема, с которой я сталкиваюсь, заключается в следующем: crfLines - это интерфейс списка коллекций.Когда цикл for (между // -----) начинается, crfLines.get (crfLinesMainIter) работает нормально.Но однажды он входит в if, и на нем выполняется другая обработка, хотя "crfLinesMainIter" изменяет crfLines.get (crfLinesMainIter), кажется, получает определенное предыдущее значение.Он не получает фактическое значение по индексу.Кто-нибудь сталкивался с таким сценарием?Кто-нибудь сможет сказать мне, почему это происходит?
Мой реальный вопрос: когда это происходит, даже если индексы могут отличаться, функция list.get () все еще получает значение из ранеекоторый был по другому индексу?
Например:
Список crfLines = new LinkedList <> ();
, если crfLinesMainIter = 2
crfLines.get(crfLinesMainIter) приносит мне значение, скажем, 20, и это значение 20 удовлетворяет условию цикла if.Итак, дальнейшая обработка происходит.Теперь, когда цикл for выполняет значения crfLinesMainIter, меняется на 5. В этом случае crfLines.get (5) должен фактически принести мне другое значение, но все равно возвращает предыдущее значение 20.