为了账号安全,请及时绑定邮箱和手机立即绑定

java中的分数系列

java中的分数系列

qq_遁去的一_1 2024-01-05 14:44:09
我需要使用循环来查找以下系列的总和:(2/3)-(4/5)+(6/7)-(8/9)+......±n我必须仅在该程序中使用 for 循环。参考代码看看我做了什么:import java.util.Scanner;public class P64 {    public static void main(String args[]) {        Scanner sc=new Scanner(System.in);        System.out.println("Enter the limit");        double n=sc.nextDouble();        double sum=0;        for(double i=1;i<=n;i++) {            if(i%2==0)            sum=sum-(++i/i++);            else            sum=sum+(++i/i++);        }            System.out.println(sum);    }}我已经尝试过,但输出不是 1 就是 0。
查看完整描述

4 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您应该使用单独的变量作为值,就像在循环中使用相同的变量一样,您的系列会让它变得复杂,所以,试试这个:


public static void main(String[] args){

    Scanner sc=new Scanner(System.in);

    System.out.println("Enter the limit");

    double n=sc.nextDouble();

    double sum=0;

    double j=1;

    for(double i=1;i<=n;i++)

    {

        if(i%2==0)

            sum=sum-(++j/++j);

        else

            sum=sum+(++j/++j);

    }

    System.out.println(sum);

}

Input: 4

Output: -0.16507936507936516


查看完整回答
反对 回复 2024-01-05
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我删除了预增量/后增量的技巧,并让限制决定了相加的项数。


import java.util.Scanner;

public class P64

{

    public static void main(String args[])

    {

        Scanner sc=new Scanner(System.in);

        System.out.println("Enter the limit");

        double n=sc.nextDouble();

        double sum=0;

        for(double i=1;i<=n;i++)

        {

            double delta = (2*i)/(2*i+1);

            if(i%2==0)

                sum -= delta;

            else

                sum += delta;

        }

        System.out.println(sum);

    }

}


查看完整回答
反对 回复 2024-01-05
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

我将使用一个变量进行交替+-,并在每次迭代时采取两步:


public static void main(String args[]) {

    Scanner sc = new Scanner(System.in);

    System.out.println("Enter the limit");

    double n = sc.nextDouble();

    double sum = 0;

    int sign = 1;

    for (double i = 2; i <= n; i = i+2 ) {

        sum = sum + (sign * (i/(i+1)));

        sign = -sign;

    }

    System.out.println(sum);

}


查看完整回答
反对 回复 2024-01-05
?
MMTTMM

TA贡献1869条经验 获得超4个赞

我认为越简单越好。


将其封装在函数中可以使您的代码更易于在主方法之外进行测试和使用。


/**

 * @link https://stackoverflow.com/questions/58606895/series-with-fractions-in-java

 */

public class P64 {


    public static void main(String[] args) {

        int n = (args.length > 0) ? Integer.parseInt(args[0]) : 10;

        System.out.println(String.format("n: %5d sum: %10.5f", n, series(n)));

    }


    static double series(int n) {

        int sign = 1;

        double sum = 0.0;

        for (int i = 1; i <= n; ++i) {

            double x = 2.0*i;

            double term = sign*x/(x+1.0);

            sum += term;

            sign *= -1;

        }

        return sum;

    }

}


查看完整回答
反对 回复 2024-01-05
  • 4 回答
  • 0 关注
  • 52 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信