Интерфейс списка коллекций в Java - PullRequest
0 голосов
/ 30 ноября 2011

Ниже приведена функция в моем коде:

    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.

1 Ответ

2 голосов
/ 30 ноября 2011

(Не ответ.)

Переработано (более или менее) для некоторой читабельности:

private static List<String> formCrfLinesWithMentionClass(int begin, int end, String id, List<String> mList, int mListPos, List<String> crf) {
    List<String> crfLines = crf;
    mListPosChanged = mListPos;

    int i = begin;
    while (i < end) {
        if (crfLines.get(i).equals("") || (crfLines.get(i).split("\\s").length != 98)) {
            ++i;
            continue;
        }

        if (!val.equals(crfLines.get(i).split("\\s")[0])) {
            ++i;
            continue;
        }                 

        int yes = checkForConsecutivePresence(i, mList, mListPos, id, crfLines);
        if (yes <= 0) {
            ++i;
            continue;
        }

        mListPosChanged += yes;
        for (int j = i; j < i + yes; j++) {
            String valString = crfLines.get(j);
            valString += (j == i) ? " B" : " I";
            crfLines.add(j, valString);             
        }
        i += yes;
    }

    return crfLines;
}
  • Что такое mListPostChanged? Меня смущает то, что для него установлено значение параметра с именем mListPos - это заставляет меня думать, что префикс m не имеет смысла.
  • Что такое val в строке, содержащей split?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...