java: как вычислить умножение между всеми значениями в переменной разности

#java

#java

Вопрос:

Я получил эту задачу: «Должен быть написан небольшой метод calculateProduct . Он попросит пользователя ввести два значения int, а затем вычислить и отобразить произведение всех значений между двумя введенными значениями. Например, если пользователь вводит числа 2 и 5, программа отобразит результат 120 (вычисляется как 2 * 3 * 4 * 5 )»

Я пытался создать что-то вроде этого:

 import java.util.Scanner;

public class Exam {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int a;
    int b;
    int big;
    int small;
    //ask to insert two variables
    System.out.println("Insert variable a");
    a = in.nextInt();
    System.out.println ("Insert variable b");
    b=in.nextInt();
    // compare two variables
    // set the biggest variables to b, the smallest - to a
    if (a >=b){
        big=a;
        small=b;
    }
    else {
        big=b;
        small=a;
    }
    // set the do while loop to complete the code. Run multiplying before counter won't fit to b variable
    int result = small;
    for (int i=small; i<=big;i  ){
        result*=i;
    }
    System.out.println("the multiplication progression between " small " and " big " equals to " result);

}

}
  

Однако, когда я вставляю 2 и 5, результат равен 240. Кто-нибудь знает, как это исправить? Спасибо!

Комментарии:

1. Инициализируйте result как 1 вместо small .

2. Вы умножили small дважды.

Ответ №1:

Измените цикл на:

 for (int i = small   1; i <= big; i  )
{
  result *= i;
}
  

Комментарии:

1. Это правильно. Инициализируя i = small, вы принимаете small «включительно» вместо exclusive в своем диапазоне.

Ответ №2:

вы инициализируете результат с помощью small, а затем снова умножаете его на small.

Исправление: запустите оператор for с small 1

  ...
 int result = small;
for (int i=small 1; i<=big;i  ){
    result*=i;
}
....
  

Ответ №3:

Другим очевидным решением здесь является изменение инструкции init с

 int result = small;
  

Для

 int result = 1;
  

В этом случае вам не нужно прикасаться к вашему циклическому коду.

И для справки: «small» здесь довольно плохое название, почему бы не назвать его «smallerInput» или что-то в этом роде.

Наконец: вы могли бы избежать работы с «small» — если a < b, вы можете просто выполнить цикл от a до b; и в противном случае вы могли бы выполнить цикл «назад» от «b до a».

Ответ №4:

Просто измените цикл for, как указано ниже, и это решит вашу проблему. Проблема в вашем цикле :

На своей первой итерации оно кратно самому себе, а не его увеличенному значению.

От:

 for (int i=small; i<=big;i  )
  

Для:

    for (int i=small 1; i<=big;i  )
  

Ответ №5:

Задача состоит в том, чтобы написать метод под названием «calculateProduct». Выше вы выполняете всю свою обработку вызовов в своем основном методе. Попробуйте отделить это. Пример :

 import java.util.Scanner;

public class Exam {

    public static void main (String[]args) { 
        Scanner in = new Scanner(System.in);
        int a;
        int b;
        System.out.println("Insert variable a");
        a = in.nextInt();
        System.out.println ("Insert variable b");
        b=in.nextInt();
        if(a>=b){
            calculateProduct(b,a);
        }
        else{
             calculateProduct(a,b);
        }
     }

    public static void calculateProduct (int m, int n) {
        int result = 1;
        for (int i = m; i <= n; i  ) {
            result *= i;
        }
        System.out.println("the multiplication progression between " m " and " n " equals to " result);
    }
}