BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream fileInputStream = new FileInputStream(reader.readLine());
Map <Integer,Integer> map = new HashMap<>();
int count =0;
while (fileInputStream.available()>0){
int temp = fileInputStream.read();
if (!map.containsKey(temp)){
map.put(temp,count);
}else {
map.replace(temp,count+1);
}
}
int max = 0;
for (Map.Entry<Integer,Integer> repeat : map.entrySet()){
System.out.print(repeat.getKey()+" ");
if (repeat.getValue()>=max)
max=repeat.getValue();
reader.close();
} fileInputStream.close();
Анна Ивашенцева
22 уровень
почему то не кидает код нужной версии, что я не так делаю ?
Обсуждается
Комментарии (21)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
27 января 2020, 13:59
У тебя count один на всех и никак не меняется.
0
Анна Ивашенцева
28 января 2020, 06:50
не очень понимаю ((
0
hidden #598481
28 января 2020, 07:11
Ну если ты разные байты должна посчитать, то, каждый с одного надо начинать считать?
Ты счетчик не скидываешь. Допустим, у тебя три байта а, а потом три байта б. Твоя программа напишет, что у тебя три а, и шесть б. Все яйца в одну картину складываешь.
0
Ksenia VolkovaJava Developer в DXCMaster
28 января 2020, 07:13
Ну смотри, если у тебя байт встречается первый раз, ты кладешь его в мапу со значением 0 (почему 0?). А если байт уже встречался, ты меняешь 0 на count + 1 (= 0 + 1 = 1). Даже если этот байт встречался уже двадцать раз - ты все равно ставишь 1.
0
Анна Ивашенцева
28 января 2020, 07:38
изменила count на 1. Логику оставила след, что если в мапе не содержится байт, то мы его добавляем с в мапу с повтором один, иначе добавляем (ключ остается такой же, а count++)
0
Анна Ивашенцева
28 января 2020, 07:38
а валидатор пишет , что "Ты выводишь все байты встречающиеся в файле, а нужно только байты с максимальным количеством повторов."
0
Анна Ивашенцева
28 января 2020, 07:51
int max = 1;
for (Map.Entry<Integer,Integer> repeat : map.entrySet()){
System.out.print(repeat.getKey()+" ");
if (repeat.getValue()>max)
max=repeat.getValue();
reader.close();
} fileInputStream.close();
}
ошибка скорее всего здесь ? я проверяю и вывожу ключи , где повторов больше чем 1, или неправильная логика ?
0
Ksenia VolkovaJava Developer в DXCMaster
28 января 2020, 08:09
Покажи код, где ты увеличиваешь счетчик.
И при чем тут "больше чем 1"? Тебе же надо найти самые частые
0
hidden #598481
28 января 2020, 08:09
выложи весь код
0
Анна Ивашенцева
28 января 2020, 08:10
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream fileInputStream = new FileInputStream(reader.readLine());
Map <Integer,Integer> map = new HashMap<>();
int count =1;
while (fileInputStream.available()>0){
int temp = fileInputStream.read();
if (!map.containsKey(temp)){
map.put(temp,count);
}else {
map.put(temp,count++);
}
}
int max = 1;
for (Map.Entry<Integer,Integer> repeat : map.entrySet()){
System.out.print(repeat.getKey()+" ");
if (repeat.getValue()>max)
max=repeat.getValue();
reader.close();
} fileInputStream.close();
}
0
Ksenia VolkovaJava Developer в DXCMaster
28 января 2020, 08:13
Вот опять у тебя один счетчик на всех и ты его увеличиваешь.
То есть для последовательности 11222 у тебя получится, что байт 2 повторяется 4 раза.
Надо увеличивать счетчик конкретного байта (который в мапе).
Как count связан со значением в map?
0
hidden #598481
28 января 2020, 08:15
количество повторов текущего байта хранится в мапе. тебе его нужно оттуда взять, увеличить на 1 и положить обратно
0
Анна Ивашенцева
28 января 2020, 08:20
мне нужно создать второй счетчик , который увеличиваем, если выполняется условие, что мапа уже содержит такой ключ ?
0
Ksenia VolkovaJava Developer в DXCMaster
28 января 2020, 08:21
Тебе вообще не нужен счетчик (count в том числе).
Твои счетчики - значения map.
0
Анна Ивашенцева
28 января 2020, 11:03
а что я должна тогда в мапу на место "value" заносить ? в key заносим сам байт, а в value заносим количество повторений, для этого разве не нужен счетчик ?
0
hidden #598481
28 января 2020, 11:08
Ну смотри, у тебя изначально пустая мапа и нет посчитанных байтов.
Ты считываешь байт и смотришь, если он его нет в мапе, то вот он твой первый повтор: кладешь его в мапу с единицей. А если он уже есть, то ты смотришь, сколько раз ты его до этого встречала (смотришь значение из мапы), увеличиваешь его на 1 и кладешь обратно в мапу с новым значением.
По сути у тебя в каждом из значений мапы получается отдельный счетчик для конкретно того байта, который в ключе.
0
Анна Ивашенцева
28 января 2020, 11:35
мне нужно создать переменную , например int value = map.getValue() и ее потом увеличивать ?
0
hidden #598481
28 января 2020, 11:36
Попробуй
0
Анна Ивашенцева
28 января 2020, 11:36
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream fileInputStream = new FileInputStream(reader.readLine());
Map <Integer,Integer> map = new HashMap<>();
int count =1;
while (fileInputStream.available()>0){
int temp = fileInputStream.read();
for(Map.Entry<Integer, Integer> map2 : map.entrySet()) {
int value = map2.getValue();
if (!map.containsKey(temp)){
map.put(temp,count);
}
else {;
map.put(temp,value++);
}
}
все равно не проходит
0
Анна Ивашенцева
28 января 2020, 11:44
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream fileInputStream = new FileInputStream(reader.readLine());
Map <Integer,Integer> map = new HashMap<>();
int count =1;
while (fileInputStream.available()>0){
int temp = fileInputStream.read();
for(Map.Entry<Integer, Integer> map2 : map.entrySet()) {
int value = map2.getValue();
if (!map.containsKey(temp)){
map.put(temp,count);
}
else {;
map.put(temp,value++);
}
}
}
int max = 0;
for (Map.Entry<Integer,Integer> map2 : map.entrySet()){
if (map2.getValue()>=max) {
max=map2.getValue();
System.out.print(map2.getKey()+" ");
}
}
reader.close();
fileInputStream.close();
}
это полностью
0
hidden #598481
28 января 2020, 11:50
Это зачем? зачем перебирать всю мапу, если ты хочешь просто взять из нее значение? Цикл тут не нужен. Тебе же нужно не значение любого байта, а конкретного. У тебя есть ключ в виде прочитанного байта (int temp). Смотришь, есть ли такой ключ в мапе, и если есть, то получаешь значение по ключу.
0