我不明白为什么sum = 0?

时间:2019-05-17 17:35:26

标签: java

我正在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;
    }

}

3 个答案:

答案 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”时,您将得到一个错误,因为计算机不知道什么总和开始为。