我被分配了一个作业,我必须创建一个程序来添加以下数字,然后在使用循环语句时告诉用户答案。
(1/3 + 3/5 + 5/7 + 7/9 + 9/11 + 11/13 + ... 95/97 + 97/99) 根据教授的说法,答案应该是45.12445,但我收到了答案40.92541,而且我无法弄清楚逻辑中的错误在哪里。
public class HW6
public static void main(String[]args)
{
//Declarations
double num;
double denom;
double holder1;
double sum;
num=1;
denom = 3;
sum=0;
// Perform loop
for (num=1;num<=98;num=num+2) {
num = num+2;
denom = denom+2;
holder1 = num/denom;
sum= sum+holder1;
}
// Print sum
System.out.println("The sum is " +sum);
}
}
答案 0 :(得分:1)
要了解逻辑中的问题,请一步一步。循环之前的初始化看起来很好,所以让我们从循环开始处开始:
迭代1
for (num=1;num<=98;num=num+2) {
此时,您的变量包含以下内容:
num == 1,denom == 3,sum == 0,holder == undefined(因为你没有初始化它)
在以下声明之后:
num = num+2;
num
更改为3,因此我们现在有:
num == 3 ,denom == 3,sum == 0,holder == undefined。
在下一个声明之后:
denom = denom+2;
denom
从3更改为5,因此我们有:
num == 3,denom == 5 ,sum == 0,holder == undefined。
然后,
之后holder1 = num/denom;
我们有第一个计算的分数,因为(因为num == 3和denom == 5)是3/5或0.6。你可能会注意到这不是你想要的,因为根据你的任务,系列中的第一部分应该是1/3。因此,您的逻辑的第一个问题是,在计算系列中的第一个分数之前,您要为num
和denom
添加2。
继
之后继续执行代码sum= sum+holder1;
变量包含
num == 3,denom == 5,sum == 0.6,holder == 0.6。
迭代2
现在在循环回执行for
循环的下一次迭代之前,num
变量将增加2,由for
循环定义中的第三个表达式指定: num=num+2
。因此,当循环开始第二次迭代时,变量包含:
num == 5 ,denom == 5,sum == 0.6,holder == 0.6。
和以前一样,接下来的两个语句分别将num
和denom
增加2,所以在计算下一个分数之前,变量包含:
num == 7 ,denom == 7 ,sum == 0.6,持有人== 0.6。
然后将变量holder
计算为num/denom
= 7/7 = 1.0(当然不是正确序列的一部分),并将其添加到sum
之后,你有
num == 7,denom == 7,sum == 1.6,holder == 1.0。
的结论强>
因此,您的逻辑中至少有两个错误。第一个是在分别将num
和denom
初始化为1和3之后,在计算它们的比率之前,每个都添加2。您可能应做的事情是在之后为num
和denom
添加2,计算他们的比率,但在跳回到开始之前循环。
在我们逐步完成代码时,您希望注意到的第二个错误是,每次循环时,您都要向num
添加2次:一次在底部根据你的for
说明符的循环,一次在循环的顶部。您只需要其中一个增量操作。
所以改进的循环看起来像:
for (num=1;num<=98;num=num+2) {
holder1 = num/denom;
sum= sum+holder1;
denom = denom+2;
}