计算y = 1/1 + 2/3 + 3/5 + 4/7 + ....... + n /(2n-1)的值,其中n是用户输入

时间:2016-05-21 10:53:45

标签: java addition series

我的代码的问题是,当我输入0时,结果为0.0,但每当我输入大于零的任何东西时(如1,2,3,4,5,6,998 ......任何东西)结果在每种情况下总是1.0。我的逻辑在迭代中是不正确的吗?

我的代码:

    /*/  Write a y program that will calculate the value of y if the expression 
of y is as follows (n is the input):

        y = 1/1 + 2/3 + 3/5 + 4/7 + ....... + n/(2n-1)     /*/

import static java.lang.System.*;
import java.util.*;

class Practice_Problems04_JavaPrograms_Task04{
    public static void main(String[] args){
        Scanner orcho = new Scanner(in);
        out.println("Please enter the value of n: ");
        int n = orcho.nextInt();
        double y = 0;

        for(int count = 1; count <= n; count++){
            y += (count / ((2 * count) - 1));
        }
        out.println("The summation is, y = " + y);
        orcho.close();
    }
}

3 个答案:

答案 0 :(得分:4)

count / ((2 * count) - 1)是整数除法,需要浮点数除法,更改为count / ((2 * count) - 1.)

当两个整数进行除法运算时,则执行整数运算,a / b等于数学运算a/b,并删除了小数部分。

1 / 2   -> 0.5  ->  0
3 / 2   -> 1.5  ->  1
-3 / 2  -> -1.5 -> -1
-3 / -2 -> 1.5  -> 1

事实上,(a / b) * b + (a % b)始终等于a

要执行浮点数除法,ab之一需要是一个浮点数,您可以使用隐式和显式转换。与a * 1. / b(double)a / b

相同

您可以查看java 8 specs multiplicative operatorstype conversion

  

乘法表达式的类型是其操作数的提升类型。   如果提升的类型是int或long,则执行整数运算。   如果提升的类型是float或double,则执行浮点运算。   15.17

答案 1 :(得分:0)

你正在将整数划分为一起,它总是产生一个int。您应该使用双打以获得结果:

for(double count = 1; count <= n; count++){
    y += (count / ((2 * count) - 1));
}

答案 2 :(得分:0)

替代什么T&amp; delta已经提到你可以在除法中尝试显式类型转换,以便除法实际上返回类型正确的值。

参考文献: https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

谢谢,

-Abe。