在循环中添加分数

时间:2015-10-29 15:02:44

标签: java loops logic

我被分配了一个作业,我必须创建一个程序来添加以下数字,然后在使用循环语句时告诉用户答案。

(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);
    }
}

1 个答案:

答案 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。因此,您的逻辑的第一个问题是,在计算系列中的第一个分数之前,您要为numdenom添加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。

和以前一样,接下来的两个语句分别将numdenom增加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。


结论

因此,您的逻辑中至少有两个错误。第一个是在分别将numdenom初始化为1和3之后,在计算它们的比率之前,每个都添加2。您可能做的事情是在之后为numdenom 添加2,计算他们的比率,但在跳回到开始之前循环。

在我们逐步完成代码时,您希望注意到的第二个错误是,每次循环时,您都要向num 添加2次:一次在底部根据你的for说明符的循环,一次在循环的顶部。您只需要其中一个增量操作。

所以改进的循环看起来像:

        for (num=1;num<=98;num=num+2) {
                holder1 = num/denom;
                sum= sum+holder1;
                denom = denom+2;
                }