计算闭区间的总和

我目前正在通过赫尔辛基大学关于 Java 的 MOOC 学习 Java,但我被困在关于循环的练习中。

这个练习要求用户输入两个整数来创建一个闭区间。输出应该是这些数字序列的总和。

例如 第一个数字是 3,最后一个数字是 5。总和的结果是 3+4+5=12。 我的问题是在结果中只计算了数字 4 和 5。 这是我的代码:

public class SumOfASequenceTheSequel {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("First number? ");
        int first = Integer.valueOf(scanner.nextLine());
        System.out.print("Last number? ");
        int last = Integer.valueOf(scanner.nextLine());
        
        int n = first;
        int sum = 0;
        
        while (n < last) {
            n++;
            sum += n;
            System.out.println(n);
        }
        System.out.println("The sum is: " + sum);

    }
}

我尝试像这样改变变量 n 的值:

int n = first - 1;

这允许 3+4+5=12 的结果,但我认为这只是一个快速修复,并没有真正解决根本问题。有没有办法在循环中包含第一个数字,以便正确显示总和?非常感谢任何额外的解释。

yxm407949656 回答:计算闭区间的总和

像这样操作循环(例如以 first-1 开头)很好,而且经常这样做。但我认为如果你想要一个更干净的解决方案,你应该做两件事。首先,在使用之前不要增加 n。其次,由于您希望总和中包含最终值,因此您应该使用 <= 而不是 <

    int n = first;
    int sum = 0;
    
    while (n <= last) {
        sum += n;
        System.out.println(n);
        n++;
    }
,

看看您的循环:首先它运行 n++,然后才将 n 添加到 sum。

把这两个倒过来就行了。

或者更好的是,“从数字 A 到数字 B”是循环的教科书:

for (int n = first; n <= last; n++) sum += n;

就是你所需要的,而且是“惯用的”,因为这是大多数 Java 开发人员应该做的。

注意:已编辑;显然,该问题将两个数字都视为包含数字,因此 <= 而不是 <

,

如果我正确理解需求

int first = Integer.valueOf(scanner.nextLine());
int last = Integer.valueOf(scanner.nextLine());

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

System.out.println(sum);
本文链接:https://www.f2er.com/28581.html

大家都在问