method返回整数数组中的奇数个数

时间:2013-04-29 22:07:46

标签: java arrays algorithm

我收到一条错误消息:

  

此方法必须返回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 个答案:

答案 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;
}