Я думаю, что здесь есть две основные вещи.
Во-первых, способ получить конечный результат. В настоящее время вы удаляете элементы из исходного ввода; лучшей стратегией является добавление элементов в новый список (частично потому, что об этом проще думать, а частично потому, что вы, как правило, не хотите изменять список во время итерации по нему).
Вы также, вероятно, случайно , перезаписывая ваш список пустым списком в конце.
Во-вторых, способ определить, находится ли ингредиент в строке ввода. Вместо того, чтобы зацикливаться на всей строке и проверять подстроки, вы можете вместо этого использовать метод indexOf()
, чтобы увидеть, содержит ли строка текущий элемент.
public static ArrayList<String> findIngredients(String foodInStock, ArrayList<String> ingredients) {
ArrayList<String> results = new ArrayList<>();
for (String ingredient : ingredients) {
if (foodInStock.indexOf(ingredient) == -1) {
results.add(ingredient);
}
}
return results;
}
Здесь мы инициализируем новый список результатов , Затем мы проводим l oop по каждому отдельному ингредиенту в списке ввода и спрашиваем, присутствует ли этот ингредиент в строке ввода. Если это не так (indexOf()
возвращает -1
), мы добавляем его в список результатов. В конце результаты содержат каждый не найденный ингредиент.