我编写了一个名为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)
答案 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);
请注意,您始终只能获得第一次出现的索引。如果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;
}