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
aslv1 avatar aslv1 304 Точки

nameAndAmoun никъде не го зареждаш със стойност, преди да го пъхнеш в orders на 16ти ред.

1
salih1f1 avatar salih1f1 188 Точки

Промених си кода - 1во зареждам nameAndAmount после го пъхам в orders но резултатът е същият.

 

 

0
tdsamardzhiev avatar tdsamardzhiev 77 Точки

2-та ключа bananas и apples сочат към един и същи обект - nameAndAmoun. Прави TreeMap-а вътре в цикъла - така ще създаваш (и слагаш в orders) нов TreeMap всеки път... което реално искаш да направиш. А дали е най-добрият начин - това е друг въпрос :)

1
25/08/2014 21:28:16
salih1f1 avatar salih1f1 188 Точки

Когато прав map-а вътре в цикъла губя Value-то на map-а. Все пак благодаря за отговора.

1
tdsamardzhiev avatar tdsamardzhiev 77 Точки
Губиш Value-то, понеже вместо да put-ваш в TreeMap-a, ти го заменяш с друг. maria 3 apples george 6 apples Вместо да казваш new TreeMap и да слагаш в него (george, 6), трябва да кажеш order.get(product) и да put-неш в него.
1
25/08/2014 22:08:01
crazy7 avatar crazy7 177 Точки

Ето нещо примерно което написах набързо, но трябва да се подобри, най-малкото да се сортират.

 

GitHub

1
Pavel_R avatar Pavel_R 57 Точки

Здравей. ЕТО едно решение на задачата от мен надявам се да ти помогне. Успех!

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