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)
}
}
问问题
53 次
6 回答
3
编译器不能假设循环将至少执行一次——这是result
分配的必要条件。
更改result
如下声明以解决问题:
int result = 1;
这将有助于您的代码编译,但它不会修复计算阶乘时的逻辑错误:目前,由于错误的循环条件,您的循环将无限期地运行。
您应该将数字从1
到num1
(含)相乘。将循环条件更改为,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 回答