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。 你能告诉我出了什么问题吗?
答案 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
超过i
,num
循环将不再执行。
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
,因为您从直接添加1
到3
开始。
您可以在彼此之间切换语句,使用sum
循环而不是for
:
while