오늘 풀어볼 문제는 HashMap과 ArrayList를 이용해서 포켓몬들(...)을 담을 가방을 만드는 것이다.
포켓몬을 담을 PokeBag 클래스를 만들고, HashMap과 ArrayList를 이용해 중복되는 포켓몬도 담을 수 있게 해주는 것 같다.
1.
private final HashMap<String, ArrayList<Pokemon>> pokemons = new HashMap<>();
String으로 포켓몬 이름을 받고, 중복되는 포켓몬을 담을 수 있게 ArrayList를 value로 받아서 HashMap을 선언해준다.
2.
public ArrayList<Pokemon> getPokemons(String name) {
return pokemons.get(name);
}
name 이름을 갖고 잇는 포켓몬을 모두 가져오는 메소드... 라고 하는데, 왜 ArrayList 형이지?? 했는데 리턴값이 ArrayList니까...... 왜 이런것도 모르나 하고 살짝 현타올뻔했다.
3.
public void add(Pokemon pokemon) {
String name = pokemon.name;
if(getPokemons(name) == null){ // HashMap에 이름이 없을 때
pokemons.put(name, new ArrayList<Pokemon>); // 해시맵에 이름과 배열을 넣어준다.
}
getPokemons(name).add(pokemon); // 이름에 해당하는 value에 pokemon을 넣어준다.
}
1에서 구현한 해시맵에 Pokemon을 넣어주는 메소드 이다. 먼저 String name으로 Pokemon이름을 받아와서, getPokemons 메소드를 이용하여 해시맵에 이름이 있는지 없는지 확인해준다. 만약 없으면 해시맵에 추가해주고, getPokemons를 다시 이용하여 pokemon을 put 해준다.
4.
이번에 구현할 메소드는 name이 같은 포켓몬 중 cp가 가장 큰 포켓몬을 구하는 건데, 처음에는 ArrayList를 받아와서 for문에 Pokemon이 아니라 cp를 넣어서 비교할려고 했는데 그러면 포켓몬이 아니라 cp를 구하는게 되어버리므로 다시 짰다......
public Pokemon getStrongest(String name) { //name 이름의 포켓몬 중 cp가 가장 큰 포켓몬을 가져오는 메소드
ArrayList<Pokemon> pokeList = getPokemons(name); // 포켓몬 리스트 받아오기
if(pokeList == null){
return null;
}
Pokemon strongest = null;
for(Pokemon pokemon: pokeList){
if(strongest == null || pokemon.cp > strongest.cp){
strongest = pokemon;
}
}
return strongest;
}
그래도 접근한 방향은 맞았으니까... 라고 합리화해본다.
5.
4번을 내부적으로 호출해서 가지고있는 포켓몬 중 cp가 가장 큰 포켓몬을 가져오게 해야한다. 굴러가라 머리머리
public Pokemon getStrongest() {
Pokemon strongest = null;
Pokemon tmp = null;
for(String name: pokemons.keySet()){
tmp = getStrongest(name);
if(strongest == null || tmp.cp > strongest.cp){
strongest = tmp;
}
}
return strongest;
}
이번에도 cp로 할뻔했으나.... 주어진 템플릿에 메소드의 반환형이 Pokemon인 것을 보고 간신히 제대로 했다.
그리고 결과는!!!!!!
xx왜안되냐
배고프니까 내일 고쳐야지......
'210525~220812' 카테고리의 다른 글
#45 영화관2 210727 (0) | 2021.07.27 |
---|---|
#44 zzzzzzzzzzㅋㅋㅋㅋㅋㅋ 210725 (0) | 2021.07.25 |
#42 3학년 2학기 시간표 210719 (0) | 2021.07.20 |
#41 HashMap 복습2 210717 (0) | 2021.07.18 |
#40 생존신고 210716 (0) | 2021.07.17 |