2013-07-07 3 views
0

Java를 사용하여 순차 검색을 구현 ​​중입니다. 문자열 배열에서 문자열을 검색하려고합니다. 쿼리는 nextLine()을 사용하여 키보드에서 가져옵니다. 그러나 문자열이 명확하게 목록에있는 경우에도 항상 "발견되지 않음"을 얻습니다.Scanner.nextLine()을 사용하여 입력 (키보드)에서 읽기

/** 
    Implementing sequential search 
*/ 
public class SequentialSearch { 
    public static boolean sequentialSearch(String[] names, String query) { //static method takes a string array and the query as arguments 
     for (String x: names) //traverse the list 
      if (x == query) { 
       System.out.println("found"); 
       return true; 
      } //end if 
     System.out.println("not found"); //end for 
     return false; 
    } //end method 
} //end class 

class TestSequentialSearch { 
    public static void main (String[] args) { 
     String[] names = {"John", "Amy", "Tom", "Jay", "Olivia", "Jack", "Peter", "Emma"}; //a new name list 
     Scanner in = new Scanner(System.in); 
     String x; 
     System.out.println(Arrays.toString(names)); 
     System.out.println("name to be searched: "); 
     while (in.hasNextLine()) { 
      x = in.nextLine(); 
      SequentialSearch.sequentialSearch(names, x); //search input in the list 
      System.out.println("name to be searched: "); 
     } //end while 
    } //end main 
} //end test 

답변

2

문자열 비교에 == 대신 equals() 메서드를 사용하십시오. equals는 문자열 내용의 동등성을 검사하는 반면, ==는 객체의 동등성을 검사합니다. 코드 if 조건 변경 :

if (x.equals(query)) 

은 등호와의 차이점에 대해 자세히 알아

if (x == query) 

에에서

를 == 여기에 관련 포스트에서 문자열을 비교 한 :

Java String.equals versus ==

+0

고맙습니다. 그것은 효과가있다! – user2487232

+0

@ user2487232 알아두면 좋을 것 같습니다. 내 대답에 왼쪽 눈금을 클릭하여 답을 수락 할 수 있습니까? –

0

당신은 se. equals()는 ==가 아닌 Java에서 문자열을 비교합니다. Java에서 문자열은 객체이고 ==는 객체 참조를 비교하기 때문입니다. 동일한 String 객체를 가리키는 두 개의 변수가있는 경우에만 true가됩니다.

.equals()는 객체 CONTENT를 비교하므로 문자열의 실제 내용을보고 동일하면 true를 반환합니다.

내가 말하는 겁니다 줄 수 있습니다 : 비 원시 타입 자바에서

if (x == query) 
0

,의 == 연산자는 참조가 아닌 값을 비교합니다. 이 같은 해당 문자열 리터럴의 무리를 작성하는 경우

는 : 자바에 대한 새로운 메모리를 할당하지 않기 때문에

String sLit1 = "test"; 
String sLit2 = "test"; 

(sLit1 == sLit2)true 될 각 String 문자, 그냥 같은에 모든 포인트 새 위치를 메모리에 저장합니다.

String sObj = new String("test") 

가 메모리에 새 위치를 차지합니다 : 그러나, 당신은 String 개체를 만듭니다. 따라서 (sLit1 == sObj)은 항상 false입니다.

즉, ==은 두 인수가 동일한 개체를 참조하는 경우에만 true를 산출합니다. 문자열을 비교하려면 sObj.equals(sLit1)에서와 같이 x.equals(query)과 같이 equals 메서드를 사용합니다.

관련 문제