List<Integer> list = new ArrayList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int max=1;
int temp=1;
for (int i = 0; i < 10; i++) {
list.add(Integer.parseInt(reader.readLine()));
}
for (int i = 0; i < list.size()-1; i++) {
if (list.get(i)==list.get(i+1)){ // почему необходимо изменить условие на equals для корректной работы с цифрами больше 127??????????
temp++;
if (temp>max){
max=temp;
}
}else {
temp=1;
}
}
System.out.println(max);
Спасибо за помощь)
Станислав
24 уровень
Помогите разобраться? Почему не работает с цифрами больше 127, но корректно работает с цифрами меньше127?
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Александр ВеревкинExpert
16 мая 2020, 15:01решение
Тут всё дело в List<Integer> list = new ArrayList<>(); Integer - это класс, и есть особенность в плане обработки его Java машиной.
Java машина создаёт изначально пул значений от -128 до 127. Поэтому когда происходит сравнение в рамках этого диапазона, она обращается к пулу по одной ссылке. Но когда значение выходит за данные рамки, то создаются два новых экземпляра, и соответственно сравнение по ссылке даёт результат false.
Поэтому и нужно использовать equals, чтобы сравнивать по значению.
+2
Станислав
16 мая 2020, 15:19
Спасибо за ответ, поискав больше информации по этому вопросу, с помощью вашей подсказки нашлась эта ссылка:
http://java-online.ru/integer-cache.xhtml
Информация для меня пока что тяжеловата к восприятию, поэтому просто оставляю её для удовлетворения интереса просматривающих этот вопрос)
0