[JAVA] Collection _ 도서 검색용 View 메소드 작성

    나의 문제

    분명히 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는 모범답안과 동일하다. 정말 정말 정말 잘했다! 

     

    728x90

    댓글