Задача 04. Teamwork projects (Objects and Classes - More Exercise) Java Fundamentals
Здравейте, имам затруднение с добавянето на член в отбор след като е минала проверката за съществуващ отбор или член. Не успявам да добавя нов член в конкретния отбор. Някъде нещо изпускам. Нещо при списъка от членове на конкретния отбор. До момента добавях членове в спиъка с такива и те отиваха във всички отбори, а не в конкретен такъв. Може ли някой да проследи моята логика и да ме насочи?
Условие:
Teamwork Projects
It's time for teamwork projects and you are responsible for making the teams. First you will receive an integer - the count of the teams you will have to register. You will be given a user and a team (separated with “-”). The user is the creator of that team.
For every newly created team you should print a message:
"Team {team Name} has been created by {user}!".
Next you will receive user with team (separated with "->") which means that the user wants to join that team. Upon receiving the command: “end of assignment”, you should print every team, ordered by the count of its members (descending) and then by name (ascending). For each team (disband teams as well), you have to print its members sorted by name (ascending). However, there are several rules:
- If user tries to create a team more than once a message should be displayed:
- "Team {teamName} was already created!"
- Creator of a team cannot create another team - message should be thrown:
- "{user} cannot create another team!"
- If user tries to join currently non-existing team a message should be displayed:
- "Team {teamName} does not exist!"
- Member of a team cannot join another team - message should be thrown:
- "Member {user} cannot join team {team Name}!"
- In the end (after teams' report) teams with zero members (with only a creator) should disband ordered by name in ascending other.
- Every valid team should be printed ordered by name (ascending) in this format:
"{teamName}: - {creator} -- {member}…" |
input:
2
Didi-PowerPuffsCoders
Toni-Toni is the best
Petq->PowerPuffsCoders
Toni->Toni is the best
end of assignment
3
Tatyana-CloneClub
Helena-CloneClub
Trifon-AiNaBira
Pesho->aiNaBira
Pesho->AiNaBira
Tatyana->Leda
PeshO->AiNaBira
Cossima->CloneClub
end of assignment
Задачата ми не е довършена, но имам нужда само от конкретната помощ, по логиката, която следвам. Ако нещо в подхода ми не е правилно, ще се радвам да ме осветлите. Благодаря предварително!
judge: https://judge.softuni.org/Contests/Practice/Index/1328#3
pastebin my code (TeamworkProjects (Main) class + Team class): https://pastebin.com/qzMm755T
От това имах нужада! Много Благодаря!!!
@MartinBG
Здравейте отново!
Направих каквото ме посъветвахте и мисля, че се получи, макар един от тестовете в judge да не минава :(
https://pastebin.com/WzZ2SDbB
Не използвах Stream API, защото все още не съм го учил, а за другите насоки, които ми дадехте, бяхте много прав.
Махнах списъка от Main класа, защото наистина не работеше, както отбелязахте.
Гетърите и сетърите в Team класа ги бях оставил, защото ползвах различни варианти за решение, но определено вашето мнение много ми помогна.
Благодаря още веднъж!
Виждам две грешки, поради които може да не минава решението.
1. Може да се създаде нов отбор от участник, който вече е създал друг отбор:
Може да решите проблема примерно с нов метод (bool canCreateTeam(teams, creatorName), който извиквате в if/else if/else конструкция
2. Сортирането не е правилно конструирано - има две отделни и независими една от друга части:
Трябва да е примерно така:
Набързо няколко коментара по кода:
- isTeamExist в момента прави обратното на това, което твърди името ѝ (връща true за несъществуващ отбор и false за съществуващ)
- на много места в кода търсите отбор по име (for (Team team : teams) { if (team.getName().equals(teamToJoin))). Много по-удобно ще е ако пазите отборите в Map<String, Team>
- в Team класа getMembers() метода връща референция към members, което е опасно (някой може да ги модифицира отвън например). Трябва да върнете unmodifiableList или дори unmodifiableCollection
- части от кода в main могат да се изнесат като методи - например прочитането на входните данни и извеждането на резултата
@MartinBG
Да, грешката идваше от отва, че може да се създаде нов отбор от участник, който вече е създал друг отбор.
Добавих в проверката вече написаният метод за проверка дали даден член на отбор съществува и готово.
Направих и корекция при сортирането, но в judge ми даде грешка на първия тест, макар че вашият подход ми се струва правилен, тъй като прави две последователни сортировки.
Метода isTeamExist беше ок, но IDE-то ме посъветва да го обърна, защото и двата пъти, в които го извиквах беше с отрицание. Направих го, но забравих да му сменя името.
Защитих масива с метода unmodifiableList(), както ме посъветвахте.
И в крайна сметка взех 100/100 точки благодарение на вас.
Уви, направих няколко опита с map, но много обърках кода.
Ще се запозная по подробно с употребата на този вид масиви, защото не можах да извикам полетата на класа Team. Не намерих начин да обходя списъка с членовете и да правя проверки, дали в Map-а се съдържат конкретни стойности.
Бих желал да видя, как би могло да стане в тази задача, но ми помогнахте много и не искам да злоупотребявам.
Благодаря!