0

我收到一条错误消息:

此方法必须返回 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;
    }
  }
}
4

4 回答 4

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语句应该在代码中的不同位置

于 2013-04-29T22:09:30.833 回答
5

以下行

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;
}
于 2013-04-29T22:10:45.093 回答
1

如果values数组中没有奇数,则函数退出而不返回int. 如上一个答案所述,将return语句移出循环。

此外,由于偶数的值为values[i]%20,奇数的值为 1,奇数的个数等于 的总和ivalues[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;
}
于 2013-04-29T22:20:53.283 回答
-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;
}
于 2013-04-29T22:24:25.230 回答