Loading...
salih1f1 avatar salih1f1 188 Точки

[Exam Problems] Java Basics - Problem {4} - Orders - Как да работим с вложени map-ове?

Здравейте, имам един малко тъп въпрос който ме мъчи вече няколко часа. Опитвам се да реша 4-та задача "Orders" на един от изпитите по Java. Стигнах до тук. Проблема е там, че получавам нещо невярно в HashMapa.

Пример:

8

steve 8 apples

maria 3 bananas

kiro 3 bananas

kiro 9 apples

maria 2 apples

steve 4 apples

kiro 1 bananas

kiro 1 apples

Резултат в HashMap-а

{ bananas={kiro=14, maria=5, steve=12}, apples={kiro=14, maria=5, steve=12}}

Ще съм много благодарен на всеки който иска да ми помогне.

П.П. Търсих в форума и в интернет но не намерих нещо полезно.

Тагове:
0
Java Advanced 25/08/2014 23:01:05
galants avatar galants 12 Точки

Здравей,

 

Първо това е моето решение. (без да го мисля много)

При теб първо трябва вътре във for да направиш обект TreeMap, Тъй като при всяка интерация nameAndAmoun сочи към един и същ обект ( тъй е към един и същ блок от Heap-а).

С прости думи и за bananas и apples ти добавяш един и същ обект nameAndAmoun(референцията е една и съща). Затова вътре във for трябва да създадеш TreeMap и него да го предадеш към HasMap. Когато напишеш TreeMap<String, Integer> nameAndAmoun = new TreeMap<String, Integer>();, това означава нека nameAndAmoun да сочи към обект с определен адрес в памета. Той винаги ще сочи към него докато не му присвоиш друг адрес (например nameAndAmoun = new TreeMap<String, Integer>();). В този случай се заделя нава памет в Heap-а и nameAndAmoun сочи към нея. От тук приизлиза и втория вариант.

2 Вариант: Вътре в for-а да промениш референцита на nameAndAmoun . По следния начин nameAndAmoun = new TreeMap<String, Integer>(); и след това да му добавяш данни.

Също така трябва да проверяваш данните за да се избегне дублирането на информация.

 

Не съм обяснил как се решава проблема, тъй като въпросът е друг а и нямам много време, но се надявам да съм бил полезен и ясен в обясненията.

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