你如何找到 Java 中的序列之和

how do you find the sum of a sequence in Java

我真的不明白如何在Java中求一个数列的和。例如,程序将要求输入序列的第一个和最后一个数字,并将序列的和相加 (3 + 4 + 5 = 12)。我的 System.out.println() 也不能正常工作。这是为什么?

import java.util.Scanner;

public class SumOfASequenceTheSequel {

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.println("First number?");
    int first = Integer.valueOf(scanner.nextLine());
    System.out.println("Second number?");
    int second = Integer.valueOf(scanner.nextLine());


    int sum = 0;

    int i = first;

    while (i <= second) {
        sum = sum + i;
        i = i++;
    }

    System.out.println("The sum is " + sum);  
  }
}

我++;被称为Post增量等于i = i + 1;所以你只需要i++;,而不是i = i++;

正如其他人所指出的,因为您在同一条语句 (i = i++;) 中进行 post-增量和赋值,所以您的程序处于无限循环中 运行。

您可能希望将其更改为预增量赋值 (i = ++i;) 或更好的普通预增量或 post 增量 (i++;)。

查看 this link 以了解前置和 post 增量运算符之间的区别。

我会推荐一个 for 循环而不是 while 循环以获得更好的可读性。请参阅以下代码段:

for(int i = first; i <= second; i++) {
    sum = sum + i;
}

如果你喜欢 Stream API 而不是传统的循环,你也可以通过以下方式打印总和:

System.out.println("The sum is " + IntStream.rangeClosed(first, second).sum());

附带说明一下,您可能希望在使用完 Scanner 资源后关闭它以避免资源泄漏,如下所示:scanner.close();

i = i++; 这种说法是错误的。因为你用了post增量。在此语句中,首先将 i 的值赋值给 i,然后再增加值。但我的价值没有改变。然后这个while循环变成无限循环。所以你需要删除赋值部分,只需要 i++;。您也可以使用 pre incremental (++i;)。如果你使用pre incremental,那么i = ++i;语句就可以了。但是不需要赋值。

如果你能用for循环代替while循环,那么你就不会遇到这个问题。对于下面的循环解决方案。下面的代码 sum += i; 等于 sum = sum + i

for (int i = first; i <= second; i++) {
            sum += i;
}