为什么从1到输入数字的奇数之和与预期的不匹配?

时间:2017-02-21 17:25:33

标签: java

import java.util.Scanner;

public class OddSum {
    public static void main(String[] args) {
        int num;
        int i = 1;
        int sum = 0;
        Scanner input = new Scanner(System.in);

        System.out.print("Enter a number: ");
        num = input.nextInt();
        input.close();

        while (i<=num) {
            i += 2;
            sum +=i;
        }
        System.out.println("The sum of odd numbers between 1 and" + num + "is: "     + sum);
    }
}

我写了这段代码来总结从1到输入数字的奇数。 现在,当我输入8时,输出为24,输出为16。 你能告诉我出了什么问题吗?

5 个答案:

答案 0 :(得分:0)

在执行求和之前,您正在递增变量。

while (i<=num) {
      sum +=i;
      i += 2;
}

答案 1 :(得分:0)

在向void MainWindow::scroll() { ui->textEdit->verticalScrollBar()->valueChanged(ui->textEdit2->verticalScrollBar()->value()); ui->textEdit2->verticalScrollBar()->valueChanged(ui->textEdit->verticalScrollBar()->value()); } 添加2之前,您应该将i添加到sum。因此,一旦i超过inum循环将不再执行。

while

答案 2 :(得分:0)

让我们一起调试代码:

取数字后,它将转到i<=num条件。很好,那么它不会得到总和而是+再次导致3。那会发生什么?第一种情况,之前未添加1,并且第一次迭代值1丢失。这意味着每当你进入循环。它在添加前一个值之前会增加。所以,用这种方式重写代码:

while (i<=num) {
  sum +=i;
  i += 2;
}

您可以改为使用for

 for(int i=1;i<=num;i+=2){
      sum +=i;
   }

答案 3 :(得分:0)

您在之前递增i ,而不是之后

while (i <= num) {
    sum +=i;
    i += 2;
}

值得注意的是,这些问题(循环变量以常量递增)通常使用for循环更方便:

for (int i = 1; i <= num; i += 2) {
    sum += i;
}

或者更好的是,如果您通过收集流来使用Java 8:

int sum = IntStream.rangeClosed(1, num).filter(i -> i % 2 != 0).sum();

答案 4 :(得分:0)

N = 8示例的结果给出24的原因是因为当i达到值7时,循环将继续并添加值{{ 1}}也发送到9,您忘记添加第一个奇数:sum,因为您从直接添加13开始。 您可以在彼此之间切换语句,使用sum循环而不是for

while