简体   繁体   English

返回和求和数组的奇数

[英]Returning and Summing the Odd Numbers of an Array

I'm trying to add all the odd numbers in an array and return it.我正在尝试将所有奇数添加到数组中并返回它。 Any thoughts on what I'm doing wrong?对我做错了什么有任何想法吗?

Example:例子:

Input:输入:

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

It would return 23它将返回 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; 
                    }
            }
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;
}

This should work.这应该有效。 return statements should not be within your if and else statements, as they will end the execution of the program immediately. return语句不应该在你的ifelse语句中,因为它们会立即结束程序的执行。

And a Java 8+ solution would be Java 8+ 解决方案将是

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

There are a few issues here.这里有几个问题。 First of all, the mod operation is not going to work on an array.首先,mod 操作不适用于数组。 It needs to be performed on a single number.它需要在单个号码上执行。 Furthermore, you are immediately returning the sumOdds without allowing the entire loop to complete.此外,您将立即返回 sumOdds 而不允许整个循环完成。

This would work.这会奏效。

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

Or better yet, use streams.或者更好的是,使用流。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM