프로그래밍

 3198, 1/160 회원가입  로그인  
   ksbgenius
   자바 도서검색 프로그래밍

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6312 [복사]


원하는 도서명을 검색을 해서 그 도서가 있으면 뭐 있다, 없으면 없다 이런식으로 나오게 하려고 하는데요
배열을 이용한후에 조건문 if문을 사용하는데
만약에 a라는 도서명을 입력해서
이것이 배열에 있는 도서명과 일치하면 있음
일치하지 않으면 없음 나오게 하려는 건데
어떤 도서명을 쓰더라도 계속 없음만 나오네요....
뭐가 문제 일까요..

import java.util.*;

public class book{

        public static void main(String args[]){
                
                String bookname;
                
                Scanner sc = new Scanner(System.in);
                System.out.println("원하는 도서명");
                bookname = sc.next();
                String[] c ={"a","b","c"};
                
        
                if(c[0]==bookname){
                         System.out.println("있음");
                }
                else
                        System.out.println("없음");
                }
        }


  Hit : 6338     Date : 2013/03/10 06:55



    
dwdwzzz http://westzero.net/21
equals == 차이같네요
2013/03/11  
$Zero 사용하신 if문은 자바의 해쉬값을 비교하는 일을 하게 됩니다.
자바에선 그렇게 사용하시면 안되요 ~
사용하신 if문의경우 예를들면
c[0] = 0x92931 , bookname = 0x91912 이런걸 비교하게 되는 것 입니다.
C에서 사용하는 포인터 주소값 처럼 자바도 해쉬값이라고 해서 포인터처럼 각 변수의 주소를 가지고 있고 스트링 변수또한 예외없이 사용하고 있어요 .
즉, 같은 문자열이라도 서로 해쉬값이 달라서 매번 false를 반환하며 없다고 뜨는거구요 .
이 문제를 해결하려면 문자열을 직접 비교하는 String 클래스의 compareTo 메소드를 사용하셔야 합니다.
c[0].compareTo(bookname) == 0
if문 조건을 이걸로 바꿔보세요
compareTo 메소드는 인자로 들어간 문자열이 메소드를 실행한 스트링 변수와 일치할 경우 0을 반환하는 메소드입니다.
2013/03/12