【发布时间】:2011-11-29 21:51:36
【问题描述】:
请在我的代码中找到以下函数:
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() 函数何时仍会检索之前位于另一个索引处的值?
例如:
List crfLines = new LinkedList();
如果 crfLinesMainIter = 2
crfLines.get(crfLinesMainIter) 给我带来一个值 20,这个值 20 满足 if 循环条件。然后进行进一步的处理。现在,当 for 循环执行时 crfLinesMainIter 的值变为 5。在这种情况下,crfLines.get(5) 实际上应该给我带来一个不同的值,但它仍然给我带来了之前的值 20。
【问题讨论】:
-
代码倒转并不能说明它有多棒......我发现乍一看很难理解这段代码。
-
你遇到的问题不清楚,不知道这个方法是做什么用的。您是否使用调试器单步执行了代码?这可能会引导您解释问题。
-
你在哪里学习到如何使用这样的 for 循环?这是我第一次见到。