【问题标题】:Returning and Summing the Odd Numbers of an Array返回和求和数组的奇数
【发布时间】:2020-03-09 19:41:24
【问题描述】:

我正在尝试将所有奇数添加到一个数组中并返回它。对我做错了什么有什么想法吗?

例子:

输入:

数组- [12,6,7,15,1]

它会返回 23

 public static int sumOdds(int[] numbers) {
            sum = 0;
            for(int i = 0; i < numbers.length; i++) {
                if (numbers%2==0) 
                return 0;
                else (numbers[i] % 2 != 0) {
                    sum += numbers;
                    return sumOdds; 
                    }
            }

【问题讨论】:

  • numbers % 2 == 0 应该做什么? numbers 是一个数组,而不是一个数字。即使您打算检查数组中的一个值,如果数组中有 any 个偶数,您真的要返回 0 吗?
  • 另外,你应该总结所有的数字。但是一旦找到偶数或奇数,您就会返回
  • @azurefrog 如果数组中没有奇数,我想返回 0
  • 您的代码无法编译。您返回 sumOdds 至极是一种方法,但您错过了参数。
  • return 0 将结束您的 for 循环并在数组中的值第一次为偶数时退出该方法。

标签: java arrays return


【解决方案1】:
public static int sumOdds(int[] numbers) {
   int sum = 0;
   for(int i = 0; i < numbers.length; i++) {
       if(numbers[i] % 2 != 0) {
           sum += numbers[i];                
       }
   }         
   return sum;
}

这应该可以。 return 语句不应包含在您的 ifelse 语句中,因为它们将立即结束程序的执行。

【讨论】:

  • 然后把名字sum改成sumOdds? sum 在这里返回 23,这不是你想要的吗?
  • 这几乎是正确的解决方案。您只需要使用 int sum = 0; 类型初始化 sum。 “我需要把它还给 sumOdds”是什么意思?
  • 对不起,我错了。
【解决方案2】:

Java 8+ 解决方案是

  public static int sumOdds(int[] numbers) {
      return Arrays.stream(numbers).filter(n -> n % 2 == 1).sum();
  }

【讨论】:

    【解决方案3】:

    这里有几个问题。首先,mod 操作不适用于数组。它需要在单个号码上执行。此外,您会立即返回 sumOdds,而不会让整个循环完成。

    这会奏效。

    public static int sumOdds(final int[] numbers) {
        int sumOdds = 0;
        for (int number : numbers) {
            if (number % 2 != 0) {
                sumOdds += number;
            }
        }
        return sumOdds;
    }
    

    或者更好的是,使用流。

    int sumOdds = IntStream.of(12, 6, 7, 15, 1).filter(number -> number % 2 != 0).sum()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多