假设我们有一个整数数组。我们编写了一个函数来获取数组中第一个指定值的索引,如果数组不包含值,则写入-1。
例如,如果array = { 4, 5, 4, 4, 7 }
,然后getFirstIndexOf(4)
将返回0,getFirstIndexOf(7)
将返回4,getFirstIndexOf(8)
将返回-1。
下面,我介绍了三种编写此功能的方法。它是一种广泛接受的编码标准,returns
位于函数中间,而breaks
位于循环中间是不好的做法。在我看来,这可能是他们可以接受的用途。
public int getFirstIndexOf(int specifiedNumber) {
for (int i = 0; i < array.length; i++) {
if (array[i] == specifiedNumber) {
return i;
}
}
return -1;
}
VS
public int getFirstIndexOf(int specifiedNumber) {
int result = -1;
for (int i = 0; i < array.length; i++) {
if (array[i] == specifiedNumber) {
result = i;
break;
}
}
return result;
}
VS
public int getFirstIndexOf(int specifiedNumber) {
int result = -1;
for (int i = 0; i < array.length; i++) {
if (array[i] == specifiedNumber && result == -1) {
result = i;
}
}
return result;
}
你怎么看?哪个最好?为什么?有没有其他方法可以做到这一点?
答案 0 :(得分:2)
我认为当你找到结果时运行一个完整的循环是不好的做法......
如果你真的想避免在循环中间使用return,我会使用“sentinel”来阻止你的循环。
public int getFirstIndexOf(int specifiedNumber, int[] array) {
boolean found = false;
boolean exit = false;
int i = 0;
int arraySize = array.length();
while(!found && !exit) {
if(array[i] == specifiedNumber) {
found = true;
} else {
if(i++ > arraySize) {
exit = true;
}
}
if(found ==true) {
return i;
} else {
return 99999;
}
}
编辑:我讨厌在StackOverflow中使用空格缩进代码...
答案 1 :(得分:1)
这就是为什么做...而&amp;发明了 while 循环。
根据要求:
public int getFirstIndexOf(int specifiedNumber) {
int i = array.Length;
while(--i > -1 && array[i] != specifiedNumber);
return i;
}