Сравнить список векторов Java - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть два списка (Matches и Motifpoisitions). Я хочу объединить список следующим образом: Для всех i, для которых i% 2 = 1, ищите Motifpoistions (k) = Matches (i) +1. А затем установите Matches (i) = Motifpostions (k + 1). Кроме того, я хочу удалить i и i-1, если k не может быть найдено.

Например, если совпадения (1,3,10,12) и мотивы (4,8), то конечный вектор должен быть (1,8). Поскольку 4 = 3 + 1, я заменил 3 на 8. А поскольку в Мотивации нет значения, равного 12 + 1, удалите 10 и 12. Вот что я сейчас пытаюсь

for( int i = 1; i < matches.size(); i = i+2){
    int motifmatched = 0;
    for(int k = 0; k <motifpositions.size(); k++){
        if(motifpositions.get(k) == matches.get(i)+1){
            matches(i) = motifpositions(k+1); 
            motifmatched ++; 
        }
    }
    if(motifmatched ==0){
        matches.remove(i);
        matches.remove(i-1);
    }
}   

1 Ответ

0 голосов
/ 14 ноября 2018

Не уверен, почему вы использовали вложенные циклы.

Попробуйте этот код, который печатает [1, 8] по запросу: -

List<Integer> matches = new LinkedList<>();
matches.add(1);
matches.add(3);
matches.add(10);
matches.add(12);

List<Integer> motifPositions = new LinkedList<>();
motifPositions.add(4);
motifPositions.add(8);

for (int i = 1; i < matches.size(); i += 2) {
    int indexOfSumInMotifpositions = motifPositions.indexOf(matches.get(i) + 1);
    if (indexOfSumInMotifpositions > -1) {
        matches.set(i, motifPositions.get(indexOfSumInMotifpositions + 1));
    } else {
        matches.remove(i);
        matches.remove(i - 1);
    }
}
System.out.println(matches);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...