Программа, которая принимает 2 числа в качестве входных данных и находит факториалы этих чисел и каждого числа между? - PullRequest
0 голосов
/ 18 февраля 2020

Этот фрагмент кода должен принимать 2 числа и находить факториал каждого числа между и включая указанные числа. Я не получаю правильный вывод, однако и не могу понять, что я делаю неправильно.

Scanner scan = new Scanner(System.in);
long result = 1;
int m = scan.nextInt();
int n = scan.nextInt();
scan.close();

if (n > 0 && m > 0)             //want factorial greater than zero
for(int j = n; j <= m; j++)
{
    for(int i = 1; i <= j; i++)
    {
        result = result * i;    //find factorial
    }
    System.out.println(result);
}
    if(n <= 0 || m <= 0)        //if value is les than zero
    {
        System.out.println("Not Valid!");
    }

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Должно сработать что-то вроде:

public class RangeFactorial {
    public static void main(String[] args) throws Exception {
        Scanner scan = new Scanner(System.in);
        int max = scan.nextInt();
        int min = scan.nextInt();

        if (max < 0 || min < 0) {
            System.out.println("Invalid Params");
        }

        for (int i = min; i <= max; i++) {
            System.out.println("Factorial for " + i + " is: " + factorial(i));
        }

        scan.close();
    }

    private static int factorial(int i) {
        if (i <= 1) {
            return 1;
        }

        return i * factorial(i-1);
    }
}

Обратите внимание, что в коде предполагается, что макс / мин находятся на месте, я опустил логи c, чтобы определить макс / мин целое число из заданных входов , Вам нужно будет добавить это.

0 голосов
/ 18 февраля 2020

Вы забыли сбросить 'result' в 1.

Кроме того, нет необходимости иметь другой оператор if, если он только проверяет отрицание первого, просто используйте else.

Я также исправил рекомендации по стилю кода, чтобы они следовали стандартным Java следующим образом:

  1. Используемый вами стиль фигурных скобок обычно используется в C / C ++.
  2. Даже если операторы if или циклы содержат только одну строку после них, в любом случае целесообразно использовать фигурные скобки в Java.

Посмотрите Google Java Руководство по стилю , если хотите узнать больше.

    Scanner scan = new Scanner(System.in);
    long result = 1;
    int m = scan.nextInt();
    int n = scan.nextInt();
    scan.close();

    if (n > 0 && m > 0){
        for(int j = n; j <= m; j++){
            result = 1; //You forgot to reset 'result'
            for(int i = 1; i <= j; i++){
                result *= i;   
            }
        System.out.println(result);
    } else { // No need for another if statement
        System.out.println("Not Valid!");
    }
...