计算一系列

时间:2015-10-26 19:29:51

标签: java

我正在尝试编写一个接受用户整数的程序,然后它应该计算这个系列 S = 1/2! - 1/3! + 1/4! - 1/5! + .... 一直到 1 / x!其中 x 是取自用户的整数,我已经编写了这段代码来计算阶乘 x

import java.util.Scanner;
public class Factorial {

    public static void main(String args[]){

        Scanner x = new Scanner(System.in);
        System.out.println("Enter a number: ");
        int number = x.nextInt();
        int fact = 1;

        for (int i = 1; i <= number; i++){
            fact = fact*i;
        }

        System.out.println("The factorial of "+number+" is "+fact);
        x.close();
    }
}

但仍然不确定如何编写系列代码,任何提示都会非常感激。

如果我的代码没有组织,我很抱歉我不知道如何使用stackoverflow工具;(。

2 个答案:

答案 0 :(得分:2)

理想情况下,您想要的是将您的代码分成多个功能,并在逻辑上进行思考。

既然你说你不想要小费,我会试着让你走上正确的轨道。

提示1:

将您的代码分成多个功能

例如。

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

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

    }
    return fact;
}

这允许您将代码拆分为可管理的块。在适当的时间调用每个块。这使您的代码更易于阅读和更可重用

提示2:

一个主要类和另一个具有函数的类。

理想情况下,您希望创建两个类,一个从用户获取输入,另一个包含所需的所有功能。获取输入的主类将创建另一个类的Object

public class Factorial{
    public static void main(String args[]){

    Scanner x = new Scanner(System.in);
    System.out.println("Enter a number: ");
    int number = x.nextInt();
    Series s=new Series(number);
    s.print();
    x.close();
}

Series.java

public class Series{
   int output;
   int input;

   Series(int i){
      input=i;
      //..here you calculate output
   }
   public int factorial(int n){
        //.... the code 
   }

  public void print(){
     System.out.println("The calculation of " + input + " is " + output);
  }


}

提示3:

制作一个很好的简单函数来计算输出。随着时间的推移总结所有因子

 for (int i = 2; i <= input; i++) {
        //if its even
        if(i%2==0)
           output = output + 1.0 / factorial(i);
        else
           output = output - 1.0 / factorial(i);
 }

将以下内容添加到构造函数中,您将拥有一个构建良好的Java程序

提示4::这些总和将是小数,而不是整数,因此您需要将所有int替换为double s

答案 1 :(得分:0)

首先,您必须计算一个术语总和。标准模式就像

double sum = 0;
for (int i = first; i <= last; i++) {
   sum += term(i);
}

然后说明

  1. 第一项是term(2)= +1/2!
  2. 第二项是term(3)= -1/3! = -term(2)/ 3
  3. 第三项是+1/4! = -term(3)/ 4
  4. 因此,您会注意到每个术语都可以从前一个术语中轻松获得。

    这导致

    double sum = 0;
    double term = (some value);
    for (int i = first; i <= last; i++) {
       term = (some expression involving i and previous term);
       sum += term;
    }
    

    锻炼离开了,呵呵,锻炼身体?