【问题标题】:what is wrong with the logic of my method to add the odd numbers of an array我添加数组奇数的方法的逻辑有什么问题
【发布时间】:2016-11-21 21:46:29
【问题描述】:

我正在尝试编写一个方法,该方法将接收数组 int[] 数字并返回数组中所有奇数的总和。我不确定为什么它没有返回正确的值。目前它应该返回“9”时返回“3”。

public static void main(String[] args) {
    int[] numbers = { 2, 1, 5, 3, 0 };
    System.out.println(oddballsum(numbers));
}

public static int oddballsum(int array[]) {

    int sumodds = 0;

    for (int i = 0; i < array.length; i++) {
        if (array[i] % 2 != 0) { sumodds = +(array[i]);}

    }
    return sumodds;
}

【问题讨论】:

    标签: java arrays logic


    【解决方案1】:

    sumodds =+ (array[i]) 表示“将array[i] 的值分配给sumodds”。 +() 没有区别 - 它在语义上与 sumodds = array[i] 相同。如果您只想要数组中的最后一个奇数值,请使用此选项。

    sumodds += array[i] 表示“将sumodds 的值增加array[i]。如果您要对数组中的奇数值求和,请使用它。

    【讨论】:

      【解决方案2】:

      错误的原因就在这段代码中……

      if (array[i] % 2 != 0) {
          sumodds = +(array[i]);
      }
      

      你不是求和或累加你只是用正号赋值

      最后,您的代码只是返回在数组中找到的最后一个奇数值...

      您必须改为:

      if (array[i] % 2 != 0) {
          sumodds += array[i];
      }
      

      【讨论】:

      • 嗨@flakes...感谢您的评论...我会及时更新
      【解决方案3】:

      如果你写的代码太多,你出错的机会更大,你应该使用java 8 Streams:

        int sumOdd = Arrays.stream(array).filter(t -> t%2==1).sum();
        System.out.println(sumOdd);
      

      【讨论】:

      • 引用引用 Jamie Zawinski 的用户 Andreas 的话:“有些人在遇到问题时会认为“我知道,我会使用 Java 8 流”。现在他们有 2问题。”流真的是大材小用——这是一个简单的语法错误。
      • 我认为初学者也应该了解java Streams,这样他们就有可能选择如何面对问题。他们应该注意什么时候可以以声明的方式(并使用流)来面对问题,以及什么时候问题需要编写一个指令列表。在这种情况下,更多地表明了声明性方法。
      • 如果问题是“我如何对 int 数组中的奇数求和”而不是为他们已经编写的非常具体的函数寻求帮助,这可能是适用的,因为他们遇到了语法问题.
      • 我在 Andy Turner 已经回答并且可能是 OP 已经解决了他的句法问题时写了这个答案。这个答案的目的是对 OP 说“嘿朋友,你有另一种方法来解决你的问题,试试这个!”。我认为这不是题外话,但我不是经验丰富的 SO 用户,如果你告诉我这是题外话或矫枉过正,那么我吸取教训......
      【解决方案4】:

      问题在于您的加法运算符=+。如果要添加新值并将其分配给同一变量,则应为+=。请参考下面的工作代码。

      public static void main(String[] args) {
          int[] numbers = {2, 1, 5, 3, 0};
          System.out.println(oddballsum(numbers));
      }
      
      public static int oddballsum(int array[]) {
          int sumodds = 0;
          for(int element : array) {
              if(element % 2 != 0) {
                  sumodds += element;
              }
          }
          return sumodds;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-12-15
        • 1970-01-01
        • 2019-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多