【问题标题】:Calculating the value of y = 1/1 + 2/3 + 3/5 + 4/7 + ....... + n/(2n-1) where n is user input [duplicate]计算 y = 1/1 + 2/3 + 3/5 + 4/7 + ....... + n/(2n-1) 的值,其中 n 是用户输入 [重复]
【发布时间】:2016-09-18 14:54:00
【问题描述】:

我的代码的问题是,当我输入 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();
    }
}

【问题讨论】:

    标签: java addition series


    【解决方案1】:

    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

    【讨论】:

    • 我已经将 y 声明为双精度数。所以这不应该有效吗?
    • @OrchoSiddiqui 不,这还不够。
    • 这还不够,因为您的count 是整数
    • @Orcho Siddiqui 你的计算端应该有一个float/double值,否则最终输出也会以整数格式给出。
    【解决方案2】:

    您将整数分割在一起,这总是产生一个整数。你应该使用双打来得到你的结果:

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

    【讨论】:

      【解决方案3】:

      除了 T & delta 提到的内容之外,您可以尝试在除法中显式类型转换,以便除法实际上返回类型正确的值。

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

      谢谢,

      -安倍。

      【讨论】:

        猜你喜欢
        • 2019-05-15
        • 2012-07-30
        • 2022-06-17
        • 2011-01-29
        • 2021-05-30
        • 1970-01-01
        • 2016-08-07
        • 1970-01-01
        • 2010-12-02
        相关资源
        最近更新 更多