Loading...
MarinaShortyMarinova avatar MarinaShortyMarinova 12 Точки

9. User Logs homework

Здравейте колеги, 

Правя 9та задача от домашното -> https://softuni.bg/trainings/resources/officedocument/12002/exercise-problem-descriptions-java-advanced-january-2017

https://gist.github.com/anonymous/838ce1ff1a14e28a48c7df43a2a0a23c

Използвам LinkedHashMap, защото доколкото знам, би трябвало да не съхранява еднакви ключове, ами да ги презаписва. Очевидно нещо не ми се получава, защото за еднакви IP-та ми прави различни записи. Отбелязала съм реда, в който има проблем, когато дебъгвам. Сравнява IP-тата и излиза, че такъв запис не съществува, а той всъщност съществува, което ме навежда на мисълта, че проблемът е в проверката, но не знам точно къде. Моля за малко помощ.

0
Java Advanced
Teodor92 avatar Teodor92 569 Точки

Проблема идва от това как update-ваш вътрешния LinkedHashMap на:

TreeMap<String,LinkedHashMap<String, Integer>> usersIPs=new TreeMap<>();

 

Или по-точно от следната част на кода:

                    if(usersIPs.get(username).containsKey(ip)){
                        int countUpdate=usersIPs.get(username).get(ip)+1;
                        newData.put(ip,countUpdate);
                        usersIPs.put(username,newData);

                    }
                    else {
                        newData.put(ip,1);
                        usersIPs.put(username,newData);

                    }

Какъв е проблема тук? Че всеки път заместваш вътрешния Map с нов (newData), което изтрива всички ip-та срещнати до сега. Това което искаш да направиш е, да вземеш същестуващия вътрешен Map и да добавш новите update/увеличиш coutner-a на същестуващо ip. Примерен фикс:

                    if (usersIPs.get(username).containsKey(ip)) {
                        int countUpdate = usersIPs.get(username).get(ip) + 1;
                        usersIPs.get(username).put(ip, countUpdate);
                    } else {
                        usersIPs.get(username).put(ip, 1);
                    }


Note: всички видове Map-ве гарантират уникалност на ключовете.

1
22/03/2017 19:52:09
MarinaShortyMarinova avatar MarinaShortyMarinova 12 Точки

Ох, да, благодаря, видях си грешката, иначе първоначалната ми логика беше точно този фикс, който си ми дал, но нещо ми гърмеше и не успях да го догодя да заработи. Иначе, честно казано не бях съвсем убедена защо мапът ми изтрива всички запазени ip-та, всъщност си мислех, че просто ще ми добави ново entry в treemap-а, а не че ще ми ги изтрие всичките. Разбрах сега каква е логиката му. Благодаря 

1
IvoVencislavov avatar IvoVencislavov 0 Точки

Прикачвам едно решение 100/100 за следващите, които тази задача ще ги мъчи. ;)

https://pastebin.com/6UbBSih4

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.