Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java顺序搜索在匹配时未返回true_Java_Arrays_Search_Sequential - Fatal编程技术网

Java顺序搜索在匹配时未返回true

Java顺序搜索在匹配时未返回true,java,arrays,search,sequential,Java,Arrays,Search,Sequential,建立我自己的顺序搜索方法,出于某种原因,我只能让int搜索工作,而不是字符串。正在搜索的列表是从.csv文件构建的,文件一次读取一行,每行包含一个对象的所有数据。从对象列表中提取一个二维数组,其中只包含它们的名称和ID,而顺序搜索只搜索这些名称和ID。我在调试器中运行了它,搜索的数组值确实显示了(名称为[4][0]),但它不返回true,而是返回false。int搜索返回true,因为它应该位于正确的位置。以下是顺序搜索代码: package Contributors;

建立我自己的顺序搜索方法,出于某种原因,我只能让int搜索工作,而不是字符串。正在搜索的列表是从.csv文件构建的,文件一次读取一行,每行包含一个对象的所有数据。从对象列表中提取一个二维数组,其中只包含它们的名称和ID,而顺序搜索只搜索这些名称和ID。我在调试器中运行了它,搜索的数组值确实显示了(名称为[4][0]),但它不返回true,而是返回false。int搜索返回true,因为它应该位于正确的位置。以下是顺序搜索代码:

    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.");
    }