我正在Udemy学习Java课程。我们有一个挑战性的问题,我理解大多数代码,但不是这样:sum = 0;
我已经问过Udemy的老师,但没有答案。
所以这是挑战: 编写一个具有int参数的isOdd方法,并将其命名为number。该方法需要返回一个布尔值。如果没有返回false,请检查该数字是否大于0。 编写另一个名为sumOdd的方法,该方法具有2个int参数:start和end,叉号代表一定范围的数字。 该方法应使用for循环来求和该范围内的所有奇数,包括“ end”,然后返回总和。 该方法称为isOdd,以检查每个数字是否为奇数。 参数end必须大于或等于start,并且start和end参数都必须大于0。
如果不满足这些方法,则返回-1。
在关于udemy的挑战中,如果我不键入sum = 0即:sum = 10,则会产生错误。我不明白为什么sum = 0?
class SumOddRange {
public static void main(String[] args) {
sumOdd(15, 13);
isOdd(10);
}
public static boolean isOdd(int number) {
if (number < 0) {
return false;
} else if (number % 2 != 0) {
return true;
} else {
return false;
}
}
public static int sumOdd(int start, int end) {
if((end < start) || (start <= 0)) {
return -1;}
int sum = 0;
for (int i = start; i <= end; i++) {
if (isOdd(i)) {
sum += i;
}
}
return sum;
}
}
答案 0 :(得分:1)
在
int sum = 0;
= 0
部分是变量sum
的初始化。也就是说,它指定了变量的初始值,几乎与您写的完全一样
int sum;
sum = 0;
局部变量在首次分配值之前没有定义的值(并且您可能无法使用它们的值),因此有必要通过这两种形式之一提供初始值。
关于为什么必须将变量专门初始化为0的原因,这是因为它是使其余方法实现按需工作的正确值。如果以不同的方式初始化它,则该方法将为相同的参数返回不同的值。
从严格意义上讲,sum
记录到目前为止已处理的奇数的连续和,在处理任何奇数之前,到目前为止已处理的奇数的确应为零。甚至可能是方法的最终返回值,例如调用SumOddRange.sumOdd(2,2)
时。
注意:请勿将赋值运算符=
与相等性测试运算符==
混淆。
答案 1 :(得分:0)
当对一系列数字求和时,必须首先用标识值为0初始化和。
所以
int sum = 0;
sum = sum + 10; // now sum is 10
sum = sum + 20; // now sum is 30
如果您使用了一系列数字的乘积,则会将prod初始化为1。
int prod = 1;
prod = prod * 5; // now prod is 5
prod = prod * 7; // now prod is 35
请注意,您需要分配一个值以接受总和。所以
int sum = sumOdd(15,13);
由于13 <15应该返回-1,这是您的方法中的错误。
答案 2 :(得分:0)
您必须创建变量sum,使其从0开始。这就像您在计算大理石或其他东西一样。在计数开始时没有人说过0,因为很明显您将从0开始。但是,计算机不知道该值,因此您必须在循环开始时告诉它当前总和为0。然后,您可以使用循环并在计数时加到您的总和中。
如果您不说sum为0,那么当您在循环中说“ sum + = i”时,您将得到一个错误,因为计算机不知道什么总和开始为。