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