BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream inputStream = new FileInputStream(reader.readLine());
ArrayList<Integer> array = new ArrayList<>();
ArrayList<Integer> arrayfinal = new ArrayList<>();
while (inputStream.available() > 0)
{ int data = inputStream.read();
array.add(data);}
inputStream.close();
int max = Integer.MIN_VALUE;
int c;
for(int i = 0;i<array.size();i++ )
{
c = 0;
array.get(i);
for (int j = 0; j<array.size(); j++ )
{
if(array.get(i).equals(array.get(j)))
{
c = c + 1;
}
}
if(c>=max)
{
max=c;
}
}
for(int i = 0;i<array.size();i++ )
{ c = 0;
array.get(i);
for (int j = 0; j<array.size(); j++ )
{ if(array.get(i).equals(array.get(j)))
{
c = c + 1;
}
}
if((c==max)&&(!arrayfinal.contains(array.get(i))))
{
arrayfinal.add(array.get(i));
}
}
for(int i = 0;i<arrayfinal.size();i++ )
{System.out.print(arrayfinal.get(i) +" ");}}}
Вопросы за 500 - изначально сравнивал if(array.get(i)==array.get(j))
Долго матерился, почему не работает. Потом сделал так - if(array.get(i).equals(array.get(j))) и все робит. Почему ?
Был у меня допустим лист:
[208, 161, 67, 208, 161, 67, 208, 161, 67, 208, 161, 67, 208, 161, 67]
Когда программа начинала искать совпадения, то результат был такой, что 208 сравнила сама с собой в нулевой ячейке, условие прошло , потом пошла дальше, сравнила в ячейке 3, уже проходило. Т.е. будто было важно сравнить именно с собой, именно в твоей ячейке.
но!
Когда пошел сравнивать цифру 67, но условие ело все сравнения адекватно.
Вылечил все только при помощи if(array.get(i).equals(array.get(j)))
Подскажите, пожалуйста, почему ?ilya
35 уровень
Уточнить.
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Mira
10 декабря 2017, 23:49
== в этом случае вы сравниваете ссылки, с помощью же equals значение (что содержится по этим ссылкам)
0
Ваня Жуков
9 декабря 2017, 08:37
У классов обёрток примитивов есть так называемый пул, в котором уже содержатся объекты обёрток с некоторыми значения и при попытке создания объекта, со значением входящим в этот пул(допустим 67), ты получишь ссылку на объект из пула, а не создашь новый. На сколько мне известно, для Byte, Short, Integer, Long это значения от -128 до 127. То есть:
Что бы гарантированно создать разные объекты, а не брать их из пула(если они там есть), нужно использовать явный способ создания нового объекта:
+3
Сергеев ВикторMaster
9 декабря 2017, 23:51
так по сути и не зачем создавать новые объекты, используйте кэшированные значения берегите сборщика мусора =)
А то будет у вас файл в несколько миллионов байт и все байты == 95. Будет у вас несколько миллионов Integer i = new Integer(95). хотя можно обойтись одним
+1
ilya
9 декабря 2017, 08:04
ЗЫ. О том, что == для примитивов, а equals для объектов я вспомнил потом.
И раз у меня лист из Integer, то equals мой выбор, но удивило поведение с цифрой 57.
Не должна была она так же один раз условию удовлетворить и все ?
0