我正在使用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
答案 0 :(得分:2)
使用equals()方法代替==进行字符串比较。当equals检查字符串内容相等时,==检查对象是否相等。更改代码if
条件:
这
if (x == query)
到
if (x.equals(query))
从相关帖子中了解有关equals和==比较字符串之间差异的更多信息:
答案 1 :(得分:0)
您需要使用.equals()来比较Java中的字符串,而不是==。这是因为在Java中,字符串是一个对象,而==会比较对象引用 - 所以只有当你有两个指向同一个String对象的变量时才会这样。
另一方面,.equals()比较对象CONTENT,因此会查看字符串的实际内容,如果它们相等则返回true。
这就是我所指的行:
if (x == query)
答案 2 :(得分:0)
在Java中,对于非基本类型,==
运算符会比较引用,而不是值。
如果您创建了一堆等效的字符串文字,例如:
String sLit1 = "test";
String sLit2 = "test";
(sLit1 == sLit2)
将为true
,因为Java不为每个新的String
文字分配新内存,它只是将它们全部指向内存中的相同位置。但是,当您创建String
对象时:
String sObj = new String("test")
它会在内存中占据一个新位置。因此(sLit1 == sObj)
始终为false
。
这意味着当且仅当两个参数引用同一个对象时,==
才会生成true。要比较字符串,请使用等于sObj.equals(sLit1)
的{{1}}中的等号方法。