Java 我添加数组奇数的方法的逻辑有什么问题

Java 我添加数组奇数的方法的逻辑有什么问题,java,arrays,logic,Java,Arrays,Logic,我正在尝试编写一个方法,该方法将接受数组int[]数字,并返回数组中所有奇数的总和。我不知道为什么它没有返回正确的值。当前,当它应该返回“9”时,它返回“3” publicstaticvoidmain(字符串[]args){ int[]数字={2,1,5,3,0}; System.out.println(oddballsum(数字)); } 公共静态int oddballsum(int数组[]){ int-sumforbits=0; for(int i=0;i和()没有区别-它在语义上与sumf

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

publicstaticvoidmain(字符串[]args){
int[]数字={2,1,5,3,0};
System.out.println(oddballsum(数字));
}
公共静态int oddballsum(int数组[]){
int-sumforbits=0;
for(int i=0;i
sumgorbits=+(数组[i])
表示“将
array[i]
的值分配给
sumgorbits
”。
+
()
没有区别-它在语义上与
sumforges=array[i]
相同。如果只需要数组中的最后一个奇数值,请使用此选项

sumforks+=array[i]
表示“将
sumforks
的值增加
array[i]
。如果您试图对数组中的奇数值求和,请使用此选项。

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


sumforges+=array[i]
表示“通过
array[i]
增加
sumforges
的值。如果试图对数组中的奇数值求和,请使用此选项。

错误的原因在于这段代码

if (array[i] % 2 != 0) {
    sumodds = +(array[i]);
}
你不是在求和或累加,你只是在用正号赋值

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

你必须做一些类似的事情:

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

错误的原因在这段代码中

if (array[i] % 2 != 0) {
    sumodds = +(array[i]);
}
你不是在求和或累加,你只是在用正号赋值

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

你必须做一些类似的事情:

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

如果编写的代码太多,则出错的可能性更大,应使用java 8流:

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

如果编写的代码太多,则出错的可能性更大,应使用java 8流:

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

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

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

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

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

引用用户Andreas对Jamie Zawinski的解释:“有些人在遇到问题时会认为“我知道,我会使用Java8流”。现在他们有两个问题。”流在这一点上真是太过分了——这是一个简单的语法错误。我认为初学者也应该了解java流,这样他们就有可能选择如何面对问题。他们应该注意什么时候可以以声明方式面对问题(并使用流),什么时候该问题需要编写一个指令列表。在本例中,更倾向于使用声明式方法。如果问题是“如何从int数组求奇数和”,而不是因为语法问题而向他们已经编写的非常具体的函数寻求帮助,那么这可能是适用的。我在Andy Turner已经回答的时候写下了这个答案,可能是OP已经回答了已经解决了他的语法问题。这个答案的目的是对OP说:“嘿,朋友,你有另一种方法来解决你的问题,试试这个!”。我认为这并不是离题,但我不是一个经验丰富的SO用户,如果你告诉我这是离题或过火,那么我就学到了教训……引用用户Andreas的话,他转述了Jamie Zawinski的话:“有些人在遇到问题时会想“我知道,我会使用Java 8流”。现在他们有两个问题。”流在这一点上真是太过分了——这是一个简单的语法错误。我认为初学者也应该了解java流,这样他们就有可能选择如何面对问题。他们应该注意什么时候可以以声明方式面对问题(并使用流),什么时候该问题需要编写一个指令列表。在本例中,更倾向于使用声明式方法。如果问题是“如何从int数组求奇数和”,而不是因为语法问题而向他们已经编写的非常具体的函数寻求帮助,那么这可能是适用的。我在Andy Turner已经回答的时候写下了这个答案,可能是OP已经回答了已经解决了他的语法问题。这个答案的目的是对OP说:“嘿,朋友,你有另一种方法来解决你的问题,试试这个!”。我认为这并不是离题,但我不是一个有经验的SO用户,如果你告诉我这是离题或过火,那么我就学到了教训…嗨@flakes。。。谢谢你的评论。。。我将更新inmediatelyhi@flakes。。。谢谢你的评论。。。我会及时更新