Некорректная работа вычислений

введите сюда описание изображения

import java.util.Scanner;

public class Third {
    public static void main(String[] args)
    {
        Scanner obj = new Scanner(System.in);
        double y = 1;
        System.out.println("Enter x:");
        int x = obj.nextInt();
        System.out.println("Enter n:");
        int n = obj.nextInt();
        if(n > 1)
        {
            label:
            for (int i = 1; i <= n - 1; i++)
            {
                double sum  = 0;
                for (int j = 0; j <= n; j++)
                {
                    if(i == (j + x))
                    {
                        continue label;
                    }
                    else if((j + x) == 0)
                    {
                        System.out.println("Error!");
                        break label;
                    }
                    else
                    {
                        sum += i / (j + x);
                    }
                }
                y *= sum;
            }
            System.out.printf("X = %d; Y = %f", x, y);
        }
        else {
            System.out.println("Invalid N!");
        }
    }
}

Есть такая программа, которая почему то при любых значениях x и n выдает y=0.

Не могу понять в чем проблема.


Ответы (1 шт):

Автор решения: Дмитрий

Тут 2 проблемы. 1) вы выводите в консоль x, y вместо sum 2)в правой части уравнения в этой строке кода все переменные типа int: sum += i / (j + x); в джаве любые математические операции над интами всегда дает int. выход простой: sum += i / (double)(j + x);

В итоге получаем примерно такой код:

import java.util.Scanner;

public class Third {

    public static void main(String[] args) {
        
        Scanner obj = new Scanner(System.in);
        double y = 1;
        System.out.println("Enter x:");
        int x = obj.nextInt();
        System.out.println("Enter n:");
        int n = obj.nextInt();
                
        if (n > 1) {
            double sum = 0;
            label:
            for (int i = 1; i <= n - 1; i++) {
                for (int j = 0; j <= n; j++) {
                    if (i == (j + x)) continue label;
                    else if ((j + x) == 0) break label;
                    else sum += i / (double)(j + x);
                }
                y *= sum;
            }
            System.out.print("Result : " + sum);
        } else {
            System.out.println("Invalid N!");
        }
    }
    
}
→ Ссылка