【问题标题】:I don't understand the why is sum = 0?我不明白为什么总和= 0?
【发布时间】:2019-05-17 17:35:26
【问题描述】:

我正在 Udemy 学习 Java 课程。我们有一个挑战问题,我理解了大部分代码,但不是这个:sum= 0;

我在 Udemy 上问过老师,但没有答案。

所以这是挑战: 用一个 int 参数编写一个名为 isOdd 的方法并将其命名为 number。该方法需要返回一个布尔值。检查数字是否 > 0,如果不是则返回 false。 编写第二个名为 sumOdd 的方法,它有 2 个 int 参数:start 和 end,它们代表一个数字范围。 该方法应使用 for 循环对该范围内的所有奇数求和,包括“结束”并返回总和。 该方法称为 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;
    }

}

【问题讨论】:

  • @forpas 从什么时候开始
  • @Michael 我的评论少了一些!!!!!
  • @forpas 你的意思是15 ! ! ! ! ! &lt; 13?为什么要使用这么多逻辑非?
  • "int是程序员最常用来存储整数值的值,其范围从-2147486648到2147486647,默认初始化值为0"
  • 是的,@YSCGProAn,但无关紧要。特别是,关于默认初始化值的部分仅适用于默认初始化本身适用的情况,不包括局部变量。

标签: java


【解决方案1】:

int sum = 0;

= 0 部分是变量sum 的初始化。也就是说,它指定了变量的初始值,几乎就像你写的一样

int sum;
sum = 0;

局部变量在第一次赋值之前没有定义的值(并且您可能不会使用它们的值),因此有必要通过这两种形式之一提供初始值。

至于为什么您必须专门将该变量初始化为 0,那是因为它是使您的方法实现的其余部分按要求工作的正确值。如果你以不同的方式初始化它,那么该方法将为相同的参数返回不同的值。

从语义上讲,sum 记录了迄今为止处理的奇数的总和,在您处理任何奇数之前,到目前为止处理的总和确实应该为零。这甚至可能是您的方法的最终返回值,例如当您调用 SumOddRange.sumOdd(2,2) 时。

注意:不要将赋值运算符 = 与相等测试运算符 == 混淆。

【讨论】:

  • 也许这不是他要问的,因为int sum;已经默认初始化为零。
  • 不,@Gus,不是。默认初始化仅适用于类变量和数组元素,而不适用于局部变量,正如我在这个答案中已经指出的那样。
  • 无论如何,@Gus,关于需要初始化的部分只是这个答案的一半。我还解决了 0 是正确初始值的算法原因。
  • 你是对的,不知何故我错过了关于局部变量 =p 如果没有初始化它会产生编译错误。
【解决方案2】:

当对一系列数字求和时,必须先将和初始化为标识值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);

应该返回 -1,因为 13

【讨论】:

    【解决方案3】:

    您必须创建变量 sum 以从 0 开始。这就像您在数弹珠或其他东西一样。从来没有人在计数开始时说 0,因为很明显你会从 0 开始。然而,计算机不知道这一点,所以你必须在循环开始时告诉它当前和为 0 . 然后您可以使用循环并在计数时添加到您的总和中。

    如果你不说 sum 为 0,那么当你在循环中说“sum += i”时,你会得到一个错误,因为计算机不知道 sum 的开始是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多