2013-07-07 116 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()方法代替==來進行字符串比較。等於檢查字符串內容相等,而==檢查對象相等。更改代碼if條件:

if (x == query) 

if (x.equals(query)) 

瞭解更多關於平等之間的差異==比較從相關的帖子在這裏字符串:

Java String.equals versus ==

+0

非常感謝,夥計們。有效! – user2487232

+0

@ user2487232很高興知道這一點。你可以通過點擊答案左邊的勾號來接受答案。 –

0

你需要你se .equals()比較Java中的字符串,而不是==。這是因爲在Java中,一個字符串是一個對象,==會比較對象引用 - 所以只有當你有兩個變量指向同一個String對象時纔是真的。

.equals()另一方面比較對象CONTENT,所以會查看字符串的實際內容,如果它們相等則返回true。

這是我指的是行:

if (x == query) 
0

在Java中,對於非基本類型中,==運算符比較參考,並不值。

如果你創建了一堆等效字符串文字,如:

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

(sLit1 == sLit2)true,因爲Java不用於分配新的內存每個新String文字,它只是他們都指向同在內存中的位置。然而,當你創建一個String對象:

String sObj = new String("test") 

它會在內存中佔據一個新的位置。所以(sLit1 == sObj)將永遠是false

這意味着==當且僅當兩個參數引用同一個對象時纔會生成true。要比較字符串,請使用equals方法,如sObj.equals(sLit1),在您的情況下爲x.equals(query)