나의 문제
분명히 bookList에 담긴 도서명을 검색 했는데, "검색되는 도서가 없습니다"로 출력이 된다.
먼저 접근방식을 이렇다. (사실 선생님께서 주석으로 접근방식을 남겨주셨다)
BookController 접근방식
1. 검색 결과 리스트를 담아줄 리스트(ArrayList<Book> searchList) 선언 및 생성
2. 반복문을 통해 bookList의 책들 중 도서명에 전달받은 keyword가 "포함 되어있는 경우"
searchList에 해당 Book객체 "추가"하기
3. searchList 반환
BookMenu접근방식
1. 검색할 도서명 키워드로 입력받기 (String keyword)
2. bc(BookController)의 searchBook() 메소드로 위의 keyword 값 전달 후
--> 결과 값을 임의의 리스트(ArrayList<Book> searchList)에 대입
3. 조건식 이용해서
3_1. searchList가 "비어있는 경우" --> "검색 결과가 없습니다." 라는 알람 문구 출력
3_2. searchList가 "비어있지 않은 경우" --> 반복문을 통해 searchList 안의 Book 객체들 출력
그럼 나의 코드를 리뷰해보자.
BookController
public ArrayList<Book> searchBook(String keyword){
// 1. searchList를 담아줄 ArrayList를 선언 및 생성했다.
ArrayList <Book> searchList = new ArrayList<>();
// 2. 반복문을 이용해서 해당 객체에 접근하였고, BookMenu에서 보내주는 keyword 가
포함이 되어 있다면, searchList에 book객체가 추가 된다.
for(int i=0; i<searchList.size(); i++) {
bookList.get(i).getTitle().contains(keyword);
searchList.add(bookList.get(i));
}
// 3. searchList에 담긴 값을 반환한다.
return searchList;
}
BookMenu
public void searchBook() {
// 1. 검색 받을 도서 입력받기
System.out.print("검색할 도서명을 입력하세요 : ");
String keyword = sc.nextLine();
// 2. bc.searchBook으로 keyword 보내기 !
그리고 돌아오는 결과값은 ArrayList <Book> searchList로 받기
ArrayList <Book> searchList = bc.searchBook(keyword);
// 3. 조건문을 이용하여, "searchList"가 비어있을 경우, 그렇지 않을 경우를 기술한다.
if(searchList.isEmpty()) {
System.out.println("검색되는 도서가 없습니다.");
} else {
for(int i=0; i<searchList.size();i++) {
System.out.println(searchList.get(i));
}
}
}
오류 원인과 해결 방법
BookController
2. 반복문을 통해 bookList의 책들 중 도서명에 전달받은 keyword가 "포함 되어있는 경우"
searchList에 해당 Book객체 "추가"하기
1) 반복문의 조건 제시가 bookList가 아닌 searchList로 잘못 기술했다.
2) "포함 되어 있는 경우" == 즉, 조건문을 제시 했었어야 한다.
그러니까 나는
1) 애초에 반복문의 조건이 틀렸기 때문에 반복문 블럭 안으로 코드들이 올 수 조차 없었던 것;
2) 그 다음 구문에서 도서명을 포함하는지, 아닌지, 판별하는 조건문이 없었기 때문에 전체 도서들이 출력된다.
public ArrayList<Book> searchBook(String keyword){
ArrayList<Book> searchList = new ArrayList<>();
for(int i=0; i<bookList.size(); i++) {
if(bookList.get(i).getTitle().contains(keyword)) {
searchList.add(bookList.get(i));
}
}
return searchList;
}
2) searchList로 반복문의 조건을 올바르게 제시하고, 조건문을 사용하지 않을 경우
for(int i=0; i<bookList.size(); i++) {
bookList.get(i).getTitle().contains(keyword);
searchList.add(bookList.get(i));
}
검색어에 "자바"를 입력했지만, 전체 도서들이 출력되는 눈물없이 볼 수 없는 광경;
===== 메인 메뉴 ====
1. 새 도서 추가
2. 도서 전체 조회
3. 도서 검색 조회
4. 도서 삭제하기
0. 프로그램 종료하기
메뉴 선택 : 3
검색할 도서명을 입력하세요 : 자바
Book [title=자바의 정석, author=홍길동, category=기타, price=20000]
Book [title=C언어, author=김말똥, category=기타, price=15000]
Book [title=도움이 되었나요, author=강보람, category=인문, price=17500]
Book [title=여러분, author=KH, category=의료, price=10000]
Conclusion
BookMenu는 모범답안과 동일함.
이번 오류를 통해 배운 점
1) 문제를 꼼꼼하게 읽자
2) 문제를 아주 꼼꼼하게 읽자
충분히 풀 수 있는 문제였는데, 98% 멈춘 느낌이라 아쉬움이 남는다.
한번 더 풀어보면 정복완. 할 수 있을 것이다.
그래도 처음 풀었을 때에 비하면, 아주 아주아주아주 장족의 발전이라고 할 수 있다.
나에게 칭찬하고 싶은 점
1. 내가 해결할 수 있는 한 끝까지 풀었다.
2. 문제에 쫄지 않았다.
3. BookMenu는 모범답안과 동일하다. 정말 정말 정말 잘했다!
'🚨 Error > JAVA' 카테고리의 다른 글
[JDBC ] ClassNotFoundException (0) | 2021.03.31 |
---|---|
[JAVA] ArrayList에서 list.contains 메소드 호출 시, false가 나오는 경우 (0) | 2021.03.22 |
[JAVA] Collection 실습 문제 2. 존재하는 도서가 없습니다. (0) | 2021.03.09 |
[JAVA] 박수박수 문제 (0) | 2021.03.03 |
[JAVA] The method information() is undefined for the type ArrayList<Employee> (0) | 2021.03.02 |
댓글