0

我正在使用 Java 实现顺序搜索。我正在尝试从字符串数组中搜索字符串。查询是使用键盘从键盘获取的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
4

3 回答 3

2

使用equals()方法而不是 == 进行字符串比较。As equals 检查字符串内容是否相等,而 == 检查对象是否相等。更改您的代码if条件:

    if (x == query)

if (x.equals(query))

从此处的相关帖子中了解有关字符串的 equals 和 == 比较之间的区别的更多信息:

Java String.equals 与 ==

于 2013-07-07T16:37:42.810 回答
0

在 Java 中,对于非原始类型,==运算符比较引用,而不是值。

如果您创建一堆等效的字符串文字,例如:

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

(sLit1 == sLit2)will be true,因为Java不会为每个新String文字分配新内存,它只是将它们全部指向内存中的相同位置。但是,当您创建String对象时:

String sObj = new String("test") 

它将在内存中占据一个新位置。(sLit1 == sObj)将永远如此false

这意味着==当且仅当两个参数引用同一个对象时才会产生 true。要比较字符串,请使用 equals 方法,如sObj.equals(sLit1)在您的情况下x.equals(query)

于 2013-07-07T16:46:45.890 回答
0

您需要使用 .equals() 来比较 Java 中的字符串,而不是 ==。这是因为在 Java 中,字符串是一个对象,而 == 将比较对象引用 - 所以只有当您有两个变量指向同一个 String 对象时才会如此。

另一方面,.equals() 比较对象 CONTENT,因此会查看字符串的实际内容,如果它们相等则返回 true。

这是我所指的行:

if (x == query)
于 2013-07-07T16:40:21.660 回答