1
import java.util.*;

//Creates a program which allows the user to find the factorial of a number

public class forLoop {
    public static void main (String [] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("Enter the number you want the factorial from: ");
        int number = input.nextInt(); // user input
        input.close();

        int result_2 = getFactorial(number); //initializes getFactorial method
        System.out.println("The factorial of " + number + " is " + result); //prints results

        }

    public static int getFactorial (int num1) {
        int result;

        for (int times = num1; times <= 1; times--) { //repeats loop until times <=1

            result = num1 * (num1 - 1); //does the factorial equation

        }

        return result;  // returns results (here is the problem)
    }
}
4

6 回答 6

3

编译器不能假设循环将至少执行一次——这是result分配的必要条件。

更改result如下声明以解决问题:

int result = 1;

这将有助于您的代码编译,但它不会修复计算阶乘时的逻辑错误:目前,由于错误的循环条件,您的循环将无限期地运行。

您应该将数字从1num1(含)相乘。将循环条件更改为,times >= 1而不是times <= 1,并将循环主体更改为result *= times以修复此错误。

于 2013-10-27T12:30:52.903 回答
1

您需要初始化此变量:

int result;

像这样:

int result = 0; //Which ever intial value you want

因为编译器将不确定 for 循环是否会一直执行。

于 2013-10-27T12:31:06.933 回答
0

由于您将函数返回值分配给result_2,因此您应该打印它而不是结果

尝试

System.out.println("The factorial of " + number + " is " + result_2); 

并且您需要在使用它们之前初始化局部变量

于 2013-10-27T12:31:25.890 回答
0

for循环的条件不正确

应该是

for (int times = num1; times >= 1; times--)
{

            result *= times; //this wil calculate right factorial

}

在 for 循环之前还将结果初始化为 1

于 2013-10-27T12:34:36.817 回答
0
int result;

    for (int times = num1; times <= 1; times--) { //repeats loop until times <=1

        result = num1 * (num1 - 1); //does the factorial equation

    }

此块导致错误。如果由于这个原因循环甚至没有运行一次

次 <=1

条件 java 不会在这里打印任何东西

System.out.println("The factorial of " + number + " is " + result);

所以这里需要初始化,它作为打印的默认值。所以解决方案是更换

int result;

int result=1; // note that I am not initializing with 0 as that will cause every factorial to become zero.

您的代码中还有另一个错误,而不是

times <= 1

它应该是

times >= 1

对于此错误,您的代码甚至可能不会运行一次。

于 2013-10-27T12:40:12.953 回答
0

只需初始化int result一些东西:

int result = 0;

因为您的循环没有执行(times已经大于 1),所以它试图返回一个未初始化的变量。

于 2013-10-27T13:12:09.173 回答