【问题标题】:How to check if all elements in array are even in Java如何检查数组中的所有元素是否都在Java中
【发布时间】:2018-06-08 23:00:48
【问题描述】:

如何检查数组中的所有元素是偶数还是奇数? 对于我尝试的事件:

public boolean isEvens(int[] array) {
    for (int i = 0; i<array.length;i++) {
        if ( i % 2 == 0) {
            return true;
        }
        else {
            return false;
        }
    }
}

但是有错误...... 提前谢谢!

【问题讨论】:

  • 阅读代码的作用:i = 0,如果 i 是偶数,则返回 true,否则返回 false,... - 不难看出问题所在.
  • i % 2 == 0 正在检查索引是偶数还是奇数。
  • 您不应该比较 i%2,因为 i 是索引,您应该比较 array[i]%2。其次,您不应该以这种方式返回布尔值。如果 array[i] 为奇数,则应从循环内部返回 false ,否则只需在循环后返回 true

标签: java arrays boolean


【解决方案1】:
  • 您应该检查数组元素,而不是数组索引。
  • 在检查数组的所有元素之前,您不应返回 true
  • 您可以使用计数器来计算奇数或偶数,也可以使用布尔值来确定是否有奇数或偶数。

例如:

public boolean allEven(int[] array) {
    for (int i = 0; i<array.length; i++) {
        if (array[i] % 2 != 0) {
            return false;
        }
    }
    return true;
}

检查是偶数还是奇数:

public boolean allEvenOrAllOdd(int[] array) {
    boolean hasOdd = false;
    boolean hasEven = false;
    for (int i = 0; i<array.length; i++) {
        if (array[i] % 2 == 0) {
            hasEven = true;
            if (hasOdd) { // has both odds and evens
                return false;
            }
        } else {
            hasOdd = true;
            if (hasEven) { // has both odds and evens
                return false;
            }
        }
    }
    return true; // either all elements are odd or all elements are even
}

【讨论】:

  • 打败我。我还认为人们只发布解决方案,而没有解释为什么发布者错误以及他们应该纠正什么。
  • 您的第二个示例似乎不必要地复杂 - if (array[i] % 2 != array[i-1] % 2) 或者您可以开始设置 hasEven 基于第一个元素,然后您仍然只需要一个 if 语句。
  • @Lino for (int i = 1; i &lt; array.length; i++) if (array[i] % 2 != array[i-1] % 2) return false; return true;.
【解决方案2】:

从 java 8 开始,使用 lambdas 减少代码是一种很好的做法:

偶数:

return Arrays.stream(array).allMatch( i -> i % 2 == 0);

奇数:

return Arrays.stream(array).allMatch( i -> i % 2 == 1);

【讨论】:

  • 你可以省略array.length == 0 ? false :部分
【解决方案3】:

只检查一个奇数元素,如果不存在则所有元素都是偶数。

public boolean isEvens (int[] array){
    for (int i = 0; i < array.length; i++) {
        if (array[i] % 2 != 0) {
            return false;
        } 
    }
    return true;
}

【讨论】:

  • 他想检查数组元素而不是i本身
  • @Cargeh 是的,你是对的,错过了这些细节,更新了答案
【解决方案4】:

您想比较索引i 处的数组元素,而不是i 本身。 检查应该是if (array[i] % 2 == 0)

【讨论】:

    【解决方案5】:

    使用下面的代码作为参考使用 a[i]

      public static void isEvens() {
        int [] array = {1,2,3,4,5};
        for (int i = 0; i<array.length;i++) {
            if (array[i] % 2 == 0) {
               System.out.println("Even");
            }
            else {
               System.out.println("Odd");
            }
        }
    

    【讨论】:

      【解决方案6】:

      我建议使用递归,因为递归的运行时间将少于循环,而且它是一些代码行。 我为此编写了一个代码,但是使用 c#,我将在下面发布它,它可能会对您有所帮助,因为 java 中的语法与 c# 的语法非常相似。

      public static bool isAllEvens(int[] a, int index)
          {
              if (index == 0 && a[index] % 2 == 0) return true;
              else
              {
                  if (a[index] % 2 == 0)
                      return true && isAllEvens(a, index - 1);
                  return false;
              }
          }
      

      要调用此函数,只需使用两个参数(数组和 array.length - 1,即最后一个索引)调用它。

      以下是调用此函数的示例

              int[] a = new int[4];
              a[0] = 8; a[1] = 4; a[2] = 8; a[3] = 8;
              Console.WriteLine(isAllEvens(a, a.Length - 1));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-22
        • 2015-01-08
        • 2021-11-08
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多