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)
}
}
答案 0 :(得分:3)
编译器不能假定循环至少执行一次 - 这是result
被分配的必要条件。
更改result
的声明以解决问题:
int result = 1;
这将有助于您的代码编译,但它不会修复计算阶乘的逻辑错误:目前,由于错误的循环条件,您的循环将无限期地运行。
您应该将1
到num1
之间的数字相乘。将循环条件更改为times >= 1
而不是times <= 1
,将循环体更改为result *= times
以修复此错误。
答案 1 :(得分:1)
您需要初始化变量:
int result;
像这样:
int result = 0; //Which ever intial value you want
因为编译器不能确定for循环将始终执行。
答案 2 :(得分:0)
因为您要将函数返回值赋给result_2
,所以应该打印而不是结果
试
System.out.println("The factorial of " + number + " is " + result_2);
你需要在使用它们之前初始化局部变量
答案 3 :(得分:0)
for循环的条件不正确
应该是
for (int times = num1; times >= 1; times--)
{
result *= times; //this wil calculate right factorial
}
在for循环之前也将结果初始化为1
答案 4 :(得分:0)
int result;
for (int times = num1; times <= 1; times--) { //repeats loop until times <=1
result = num1 * (num1 - 1); //does the factorial equation
}
此块导致错误。如果由于这个
,循环甚至没有运行一次次&lt; = 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
对于此错误,您的代码可能无法运行一次。
答案 5 :(得分:0)
只需将int result
初始化为:
int result = 0;
因为你的循环没有执行(times
已经大于1),所以它试图返回一个未初始化的变量。