我收到一条错误消息:
此方法必须返回 int 类型的结果。
我的代码:
public int countOdds (int[] values) {
int countOdd =0;
for (int i=0; i<values.length; i++) {
if (values[i] %2 != 0) {
countOdd++;
return countOdd;
}
}
}
编译器认为该方法可能根本不返回任何内容:
public int countOdds (int[] values) {
int countOdd =0;
for (int i=0; i<values.length; i++) {
if (values[i] %2 != 0){
countOdd++;
return countOdd;
}
}
// what if this line is reached?
}
假设您使用values.length = 0
. 该方法将返回什么?
您的return
语句应该在代码中的不同位置
以下行
return countOdd;
应该在你的 for 循环之外。
否则,当您到达第一个赔率时,您将返回 1,或者如果没有赔率,您将根本不会到达 return 语句。
public int countOdds (int[] values) {
int countOdd =0;
for (int i=0; i<values.length; i++) {
if (values[i] %2 != 0) {
countOdd++;
}
}
return countOdd;
}
如果values
数组中没有奇数,则函数退出而不返回int
. 如上一个答案所述,将return
语句移出循环。
此外,由于偶数的值为values[i]%2
0,奇数的值为 1,奇数的个数等于 的总和i
,values[i]%2
从而可以显着缩短代码:
public int countOdds (int[] values) {
int i, count=0;
for (i=0; i<values.length; ++i) {
count += values[i]%2;
}
return count;
}
另一个版本使用按位与:
public int countOdds (int[] values) {
int i, count=0;
for (i=0; i<values.length; ++i) {
count += values[i] & 1;
}
return count;
}
假设 if 语句从不返回 true,那么该方法会返回任何内容吗?不,它不会,因此您需要包含一个 return 语句,该语句将在 if 语句从未运行的情况下执行。
public int countOdds (int[] values) {
int countOdd =0;
for (int i=0; i<values.length; i++) {
if (values[i] %2 != 0) {
countOdd++;
}
}
return countOdd;
}