public class FindNumber {
static String findNumber(List<Integer> arr, int k) {
String res = "YES";
//Unable to identify problem with this part of the code
for (int i = 0; i < arr.size(); i++) {
if (k == arr.get(i))
res = "YES";
else
res = "NO";
}
return res;
}
}
Приведенный выше код возвращает НЕТ в качестве ответа, даже если целое число присутствует в списке.
в вашем коде есть несколько ошибок. Если вы хотите true или false, верните логическое значение (например)
@JonK нет сравнения между объектами Integer. Сравнение проводится между объектом Integer и примитивом int. В этом случае целочисленный объект автоматически распаковывается.
@THe_strOX Абсолютно верно, поэтому это комментарий, а не ответ. Это довольно легко укусить, когда вы только начинаете, поэтому я считаю, что об этом все же стоит упомянуть.
@JonK Это имеет смысл.




Это будет работать:
static String findNumber(List<Integer> arr, int k) {
String res = "YES";
for (int i = 0; i < arr.size(); i++) {
if (k == arr.get(i))
res = "YES";
break;
else
res = "NO";
}
return res;
}
Как только вы найдете целое число, вы должны остановить цикл, и вы можете сделать это с помощью break
если вы хотите пойти на подобное исправление, вы должны были просто заменить все if else на if (found) return "YES";
попробуй оптимизировать свой код....
способ 1 (используя цикл for-each):
static String findNumber(List<Integer> arr, int k) {
for (Integer integer : arr) {
if (integer == k) {
return "YES";
}
}
return "NO";
}
другой способ (с использованием тернарного оператора):
static String findNumber(List<Integer> arr, int k) {
return arr.contains(k) ? "YES" : "NO";
}
Вы можете просто использовать arr.contains(), чтобы получить логическое значение того, находится ли Integer в списке или нет. Затем вы можете перевести это значение в YES или NO (если вам это действительно нужно):
String yesNo = arr.contains(k) ? "YES" : "NO";
или измените возвращаемый тип на логический и скажите: return arr.contains(k);
Использование потоков:
static String findNumber(List<Integer> arr, int k) {
return arr.stream()
.filter(e -> e == k)
.findFirst()
.map(e -> "YES")
.orElse("NO");
}
public static String isListContainsNumber(List<Integer> nums, int n) {
return nums.stream().anyMatch(el -> el.equals(n)) ? "YES" : "NO";
}
Основная проблема с вашим кодом в том, что даже если он находит целочисленный объект в ArrayList, после установки res = Yes он все равно продолжает итерацию. Поэтому существует вероятность того, что в списке могут быть другие значения не нужного типа данных, тем самым возвращая res значение No. Решение здесь состоит в том, чтобы использовать оператор перехода, такой как break, который завершает процесс цикла, как только встречается целое число. Надеюсь, поможет!
Спасибо :) .. оператор прыжка - это то, что я пропустил. Добавление «break» после возврата «YES» решило проблему.
Использование
==для сравнения целочисленных объектов работает только в том случае, если значения находятся между-128и127, все остальные значения необходимо сравнивать с использованием метода.equals().