public static List<Integer> removeOddNumbers(ArrayList<Integer> list) {
if (list.isEmpty()) { throw new Error(); }
List<Integer> toRemove = new ArrayList<>();
for (int i : list) {
if (i % 2 != 0) { toRemove.add(i); }
}
list.removeAll(toRemove);
return list;
}
Я пытаюсь удалить все нечетные элементы из ArrayList, а затем возвращаю этот ArrayList.
Я получаю сообщение об ошибке, указывающее на список целых чисел в этой первой строке
Контрольная работа:
ArrayList<Integer> arrayList = new ArrayList<Integer>();
Collections.addAll(arrayList, 3, 5, 6, 24, 7, 9, 1, 8, 28, 11);
ArrayList<Integer> result = removeOddNumbers(arrayList);
System.out.println(result);
Результат:
[6, 24, 8, 28]
Вы можете использовать другой список для хранения элемента, который хотите сохранить, или выполнить итерацию в обратном направлении.
Не могли бы вы добавить код, по которому вы звоните removeOddNumbers?




Если вы используете Java 8, вы можете просто использовать Коллекция :: removeIf:
list.removeIf(i -> i % 2 != 0);
Полный метод должен выглядеть так:
public static List<Integer> removeOddNumbers(List<Integer> list) {
list.removeIf(i -> i % 2 != 0);
return list;
}
Пример
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 6, 5, 4));
list.removeIf(i -> i % 2 != 0);
System.out.println(removeOddNumbers(list));
Выходы
[2, 6, 4]
где бы я это использовал?
что ты имел ввиду где бы я это использовал?
Думаю, у него другая проблема. Код в основном должен работать - даже если это не самый простой способ.
получение ошибки не удается найти символ в List <Integer>
@ qwert123 используйте List<Integer> вместо ArrayList<Integer>, проверьте мою правку
что ты имел ввиду @sarkasronie?
Если вы намекнете ему, в чем была его проблема, вы получите от меня +1. Потому что его проблема заключалась не в алгоритме удаления нечетных чисел.
@sarkasronie OP кажется, что он вызывает свой метод, используя List<Integer> list и List<Integer> cannot be converted to ArrayList<Integer>
@ qwert123 до вас, чтобы понять больше, взгляните на stackoverflow.com/questions/14903145/…
лямбда-способ:
public static List<Integer> filter(List<Integer> numberList) {
return numberList.stream()
.filter(number -> number % 2 != 0)
.collect(Collectors.toList());
}
Вы должны вызвать этот метод так:
List<Integer> list = Arrays.asList(3, 5, 6, 24, 7, 9, 1, 8, 28, 11);
List<Integer> result = removeOddNumbers(numbers);
System.out.println(result);
Проблема в том, что возвращаемый тип метода - List<Integer>, но ваш код ожидает ArrayList, решение состоит в том, чтобы просто использовать общий класс List или, если вы хотите использовать свой код, он должен быть таким:
ArrayList<Integer> arrayList = new ArrayList<Integer>();
Collections.addAll(arrayList, 3, 5, 6, 24, 7, 9, 1, 8, 28, 11);
List<Integer> result = removeOddNumbers(arrayList);
System.out.println(result);
N.B Метод, опубликованный @YCF_L, редактирует список, который вы передаете параметром, мой метод вместо этого создает новый список, оставляя исходный список нетронутым
Действительно. получение ошибки не удается найти символ и в List <Integer>
@ qwert123 Опубликовать полный класс, вероятно, это синтаксическая ошибка
Класс не дали, но отправили тест
@ qwert123 исправлено
// you can use Iterator.remove()
List arr = new ArrayList();
arr .add(10);
arr .add(20);
arr .add(30);
arr .add(1);
arr .add(2);
// Remove odd elements
// Iterator.remove()
Iterator itr = arr .iterator();
while (itr.hasNext())
{
int x = (Integer)itr.next();
if (x % 2 != 0)
itr.remove();
}
System.out.println("Modified ArrayList : " + arr);
Вы должны использовать Iterator, чтобы удалить элементы из списка. Это избавит от необходимости использовать временный список, в котором вы храните нечетные элементы.
public static List<Integer> removeOddNumbers(List<Integer> arrayList) {
Iterator<Integer> itr = arrayList .iterator();
while (itr.hasNext())
{
int x = (Integer)itr.next();
if (x % 2 != 0) {
itr.remove();
}
}
return arrayList;
}
ИЛИ ЖЕ
Вы можете сделать код намного проще с Java8.
Какую ошибку вы получаете?