我收到一条错误消息:
此方法必须返回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;
}
}
}
答案 0 :(得分:5)
编译器认为该方法可能根本不返回任何内容:
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
声明应位于代码中的其他位置
答案 1 :(得分:5)
以下一行
return countOdd;
应该在你的for循环之外。
否则,当你达到第一个奇数时,你将返回1,或者如果没有赔率,你根本不会达到一个返回声明。
public int countOdds (int[] values) {
int countOdd =0;
for (int i=0; i<values.length; i++) {
if (values[i] %2 != 0) {
countOdd++;
}
}
return countOdd;
}
答案 2 :(得分:1)
如果values
数组中没有奇数,那么您的函数将退出而不返回int
。如前一个答案中所述,将return
语句移出循环。
另外,因为values[i]%2
的值对偶数是0而对于奇数是1,奇数的数量等于i
的{{1}}的总和,允许你显着缩短代码:
values[i]%2
替代版本使用按位AND:
public int countOdds (int[] values) {
int i, count=0;
for (i=0; i<values.length; ++i) {
count += values[i]%2;
}
return count;
}
答案 3 :(得分:-1)
假设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;
}