Серия с дробями в Яве - PullRequest
       30

Серия с дробями в Яве

2 голосов
/ 29 октября 2019

Refer 4th series for better clarification Мне нужно использовать цикл, чтобы найти сумму следующих серий:

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

Ответы [ 4 ]

2 голосов
/ 29 октября 2019

Я бы использовал переменную для переменного +- и делал бы шаг два на каждой итерации:

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);
}
1 голос
/ 29 октября 2019

Я удалил хитрость преинкремента / постинкремента и сделал предел, определяющий количество суммируемых терминов.

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);
    }
}
1 голос
/ 29 октября 2019

Вы должны использовать отдельную переменную для значений, как и в цикле, то же самое, и ваша серия сделает ее сложной, поэтому попробуйте следующее:

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
0 голосов
/ 29 октября 2019

Я думаю, что чем проще, тем лучше.

Инкапсуляция его в функцию облегчает тестирование и использование кода вне метода main.

/**
 * @link /12859187/seriya-s-drobyami-v-yave
 */
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;
    }
}
...