Loading...
ivelina_popova avatar ivelina_popova 37 Точки

[Judge] Java Basics Exam 1 June 2014 - Logs Aggregator

Здравейте,

Още не са ми съвсем ясни колекциите и имам проблем с тази задача. Всичко излиза вярно с изключение на следното: Когато „попълва“ вътрешния TreeMap и срещне за втори път еднакво IP – презаписва върху вече съществуващото (естествено), съответно не мога да запазя и двата „duration”-a.

Има ли как да му кажа да запише на същото това IP (което вече е записано), втори “duration”. Както съм направила с ключовете от голямото дърво – на едно и също “name” мога да имам няколко IP-та. Мога да разгледам чуждо решение, но искам да разбера, дали по този начин може да стане.

Благодаря!

http://pastebin.com/mPUwnpL0

Тагове:
0
Java Advanced
SimeonStoykov avatar SimeonStoykov 114 Точки

Здравей. Аз бих ти предложил следното решение (не знам до колко е оптимално, защото и аз нямам голям опит с колекциите, но работи). Просто в else частта (където ти липсва код) добавяш следния код:

TreeMap<String, Integer> temporary = new TreeMap<String, Integer>();
temporary = logs.get(name);
logs.get(name).put(ip, temporary.get(ip) + dur);

Идеята е следната. Създаваш един TreeMap, в който вкарваш данните за текущия потребител (ip-та и продължителност на логване за всяко ip). След това когато към даден потребител и дадено ip (в което вече има дадена продължителност) искаш да добавиш нова продължителност, просто в това ip записваш старата продължителност (която си взимаш от временния TreeMap) + новата и с тази нова стойност презаписваш старата стойност на продължителността за даденото ip. Надявам се ме разбра, ако имаш въпроси питай пак. Другото, което забелязах е че имаш малка грешка в кода към края, когато печаташ. Декларираш променливата sum извън for цикъла и така, когато набереш определена сума за първия потребител тя си остава и към нея се трупа сумата и за втория и по този начин сумата за втория винаги ще ти е грешна. Просто трябва на всяко завъртане на цикъла да нулираш променливата sum. За целта можеш просто да я декларираш в началото на цикъла и така тя винаги сама ще става 0 за всеки следващ потребител.

2
Filkolev avatar Filkolev 4482 Точки

Това е начинът. Може да не се създава нов мап, а просто към стойността на dur да се добави текущата стойност. Т.е.:

dur += logs.get(name).get(ip);
logs.get(name).put(ip, dur);

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