#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);
}
}