我正在尝试找出系列的总和,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
s,所以你正在表演 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;
}
}
关于java - 系列代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791111/