系列代

Series generation

我正在尝试找出级数的总和,1/2! - 2/3! + 3/4! - 4/5! ... 名词。抱歉,这听起来很尴尬,但总和始终显示为 0.0。我不知道发生了什么,我才刚刚开始。任何人都可以指出错误并建议如何解决吗?谢谢!

import java.util.Scanner;
public class Series {
    /*
     * Series design: 1/2! - 2/3! + 3/4! - 4/5! .. n 
    */
    static double sum = 0; static int n;
    Scanner sc = new Scanner(System.in);
    public static int fact(int n){
        int fact = 1; 
        for (int i = 1; i<=n; i++){
            fact *= i;
        }
        return fact;
    }
    void generate(){
        double sign = 1.0; double term;
        for (int i = 1; i<=n; i++){
            term = i/fact(i+1) * sign;
            sum += term;
            sign *= -1;
        }
    }
    void accept(){
        System.out.println("Enter the value of n:");
        n = sc.nextInt(); 
    }
    public static void main(String[] args){
        Series o = new Series();
        o.accept();
        o.generate();
        System.out.println("The sum of the series is: " +sum);
    }
}

你的问题是 i/fact(i+1) 是一个 int 分区,所以它被截断为 0(因为它小于 1)。

改为(double)i/fact(i+1)

或者,您可以写

term = sign*i/fact(i+1);

因为 sign 已经是双倍的,所以它会确保 sign*i 也是双倍的,除法将是浮点除法。

ifact(i+1) 都是 int,因此您正在执行 integer division。由于 i < fact(i+1),每个这样的术语都会产生一个零。

您将 sign 定义为 double 的想法是正确的,但由于 /* 具有相同的优先级,因此您首先执行整数除法,然后乘以双 sign。将它移到表达式的开头应该可以解决问题:

void generate(){
    double sign = 1.0; double term;
    for (int i = 1; i<=n; i++){
        term = (sign * i) / fact(i+1);
        sum += term;
        sign *= -1;
    }
}
import java.util.Scanner;

public class Series {


    static double sum = 0.0;
    static int n=0;
    static Scanner sc = new Scanner(System.in);

    public static int fact(int n)
    {
       int fact = 1; 

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

        fact *= i;
    }
    return fact;
   }

    static void generate(){
     //because of static property

     double sign = 1.0; double term;
     for(int i = 1; i<=n; i++){
        term = (i* sign)/fact(i+1) ;
        sum += term;
        sign *= -1;
     }
}
     static void  accept(){

       //because of static property

       System.out.println("Enter the value of n:");
       n = sc.nextInt(); 
    }
    public static void main(String[] args){

    Series.accept();
    Series.generate();
    System.out.println("The sum of the series is: " +sum);
}
}