Сравнить векторы списка Java

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

Например, если совпадения (1,3,10,12) и Motifpositions (4,8), то конечный вектор должен быть (1,8). Поскольку 4 = 3 + 1, я заменил 3 на 8. А поскольку в Motifpositions нет значения, равного 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);
    }
}   

Привет, добро пожаловать в Stack Overflow. Вы уже рассказали нам, что пытаетесь сделать, и предоставили свой код, и это здорово! Пожалуйста, также расскажите нам, что не работает: что ваш код делает неправильно, или где он ошибочный и какую ошибку он выдает?

MyStackRunnethOver 14.11.2018 02:43

а) motifpositions(k+1); - не (вам нужен get? б) тот же код также вызовет исключение за пределами

Scary Wombat 14.11.2018 02:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
38
1

Ответы 1

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

Попробуйте этот код, который печатает [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);

Другие вопросы по теме