java 中的分数级数

Series with fractions in java

我需要使用循环求以下数列的和:

(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。

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

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

我删除了 preincrement/postincrement 技巧并使限制决定了相加的项数。

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

我会为交替使用一个变量 +- 并在每次迭代时采取两个步骤:

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

我觉得越简单越好。

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

/**
 * @link 
 */
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;
    }
}