你如何找到 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;
}
我真的不明白如何在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;
}