У меня есть два списка (совпадения и мотивы). Я хочу объединить список следующим образом: для всех 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);
}
}
а) motifpositions(k+1); - не (вам нужен get? б) тот же код также вызовет исключение за пределами




Не уверен, почему вы использовали вложенные циклы.
Попробуйте этот код, который печатает [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);
Привет, добро пожаловать в Stack Overflow. Вы уже рассказали нам, что пытаетесь сделать, и предоставили свой код, и это здорово! Пожалуйста, также расскажите нам, что не работает: что ваш код делает неправильно, или где он ошибочный и какую ошибку он выдает?