Java 我添加数组奇数的方法的逻辑有什么问题
我正在尝试编写一个方法,该方法将接受数组int[]数字,并返回数组中所有奇数的总和。我不知道为什么它没有返回正确的值。当前,当它应该返回“9”时,它返回“3”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
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。。。谢谢你的评论。。。我会及时更新