Java顺序搜索在匹配时未返回true
建立我自己的顺序搜索方法,出于某种原因,我只能让int搜索工作,而不是字符串。正在搜索的列表是从.csv文件构建的,文件一次读取一行,每行包含一个对象的所有数据。从对象列表中提取一个二维数组,其中只包含它们的名称和ID,而顺序搜索只搜索这些名称和ID。我在调试器中运行了它,搜索的数组值确实显示了(名称为[4][0]),但它不返回true,而是返回false。int搜索返回true,因为它应该位于正确的位置。以下是顺序搜索代码:Java顺序搜索在匹配时未返回true,java,arrays,search,sequential,Java,Arrays,Search,Sequential,建立我自己的顺序搜索方法,出于某种原因,我只能让int搜索工作,而不是字符串。正在搜索的列表是从.csv文件构建的,文件一次读取一行,每行包含一个对象的所有数据。从对象列表中提取一个二维数组,其中只包含它们的名称和ID,而顺序搜索只搜索这些名称和ID。我在调试器中运行了它,搜索的数组值确实显示了(名称为[4][0]),但它不返回true,而是返回false。int搜索返回true,因为它应该位于正确的位置。以下是顺序搜索代码: package Contributors;
package Contributors;
public class SequentialSearch {
//search for name match
static boolean contains(String[][] names, String nameSearched){
for (String[] name : names) {
if (name[0].equalsIgnoreCase(nameSearched)) {
return true;
}
}
return false;
}
//search for ID match
static boolean contains(String[][] names, int idSearched){
for(int loop = 0; loop<names.length; loop++){
if(Integer.parseInt(names[loop][1]) == idSearched){
return true;
}
}
return false;
}
}
最后一个System.out正在打印(ID),但没有打印名称。你知道为什么吗?既然你可以在调试器中运行它,我想你也可以在迭代中(name[0].equalsIgnoreCase(namesearch))将程序控制权暂停在你期望的结果为真的地方。在这里,您可以查看name[0]和namesearch是否真的具有您期望的值。为什么要对循环使用不同的
?为什么不将失败的(字符串搜索)更改为有效的(索引搜索)?也就是说,for(字符串名[]:name)
似乎不起作用,但是for(int loop=0;loop您是否尝试过对两个字符串进行子字符串测试,分别是toLower和toUpper?DSlomer-我两种方法都做了,以防出现差异-它没有。Fildor-还没有使用toLower或toUpper,我将不得不查看它们,请提供一个简短完整的代码示例,我们可以轻松地在我们这边运行,以查看相同的结果。看。我做到了,在我看来,我看不出被比较的两个变量之间有什么区别。这就是为什么我不知道出了什么问题。它只是继续到下一行并返回false-我需要添加一个中断;还是将返回false放入if条件中?@MichaelChristopher如果你能发布一个我们可以看到的特定部分的屏幕截图,可以吗名称[0]和名称的值是在调试器中搜索的。我认为可能会有一个非常细微的差异。
public class SearchArray {
String[][] nameSearch(List sortedList){
String[][] sortedNames = new String[sortedList.size()][2];
Contributor current;
String currentName;
String currentID;
//loop to add each name and ID field to a 2d array
for(int copy = 0; copy < sortedList.size(); copy++){
current = (Contributor) sortedList.get(copy);
currentName = current.getname();
currentID = String.valueOf(current.getid());
sortedNames[copy][0]=currentName;
sortedNames[copy][1]=currentID;
}
return sortedNames;
}
}
//implement search
String searchName = "Pipps, George";
int searchID = 25;
searchList = searchGrid.nameSearch(contributorList);
if(SequentialSearch.contains(searchList, searchName)){
System.out.println(searchName + " Found.");
}
//search for contributor 25
if(SequentialSearch.contains(searchList, searchID)){
System.out.println("Contributor ID " + searchID + " found.");
}