为什么我的getIndex方法不起作用?

时间:2014-09-10 05:44:10

标签: java arrays string indexing

我编写了一个名为getIndex的方法,当我运行测试程序时,它不会返回一个数字。

public int getIndex(String s){
    int index = -1;
    for(int i = 0; (i < names.length && index == 1); i++)
    {
        if(names[i].equals(s)) {
            index = i;
        }        
    }
    return index;
}

如果不清楚,我试图让方法返回给定字符串所在的数组中的哪个位置。

EDIT-- [这是我在ideone上的代码](http://ideone.com/CM9xID

2 个答案:

答案 0 :(得分:2)

您的循环条件立即为假。

你的代码说:

while 0 < LENGTH_OF_NAMES AND -1 is equal to 1

-1 永远不等于为1所以你的循环永远不会发生

更改:

for(int i = 0; (i < names.length && index == 1); i++)

要:

for(int i = 0; i < names.length; i++)

答案 1 :(得分:2)

你以错误的方式迭代,如果比较index == 1,循环永远不会开始,因为索引是用-1声明的。如果你用1声明你的索引,循环就会开始,但如果名字[1]不等于s则循环运行,所以只需删除它就可以了。

public int getIndex(String s){
    for(int i = 0; (i < names.length; i++)
    {
        if(names[i].equals(s)) { //use equalsIgnoreCase if comparing should be case insensitive
            return i; //found
        }        
    }
    return -1; //not found
}

你的循环的另一个版本是(如果你只想要索引,你可以直接使用indexOf(),如上例所示):

List<String> names2 = new ArrayList<String>(Arrays.asList(names));
for(String name : names2){
    if(name.equals(s))
        return names2.indexOf(name);
}

这是loop的增强功能。

您也可以快捷方式直接获取索引:

 List<String> names2 = new ArrayList<String>(Arrays.asList(names));
 return names2.indexOf(s);

Ideone Fiddle

请注意,您始终只能获得第一次出现的索引。如果s在数组中不止一次,你必须增强它来存储找到的索引并返回所有索引!

public List<Integer> getIndexes(String s){
    List<Integer> found = new ArrayList<Integer>();
    for(int i = 0; (i < names.length; i++)
    {
        if(names[i].equals(s)) { //use equalsIgnoreCase if comparing should be case insensitive
            found.add(i);
        }        
    }
    return found;
}