结果没有初始化?

时间:2013-10-27 12:28:19

标签: java loops for-loop methods return

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

6 个答案:

答案 0 :(得分:3)

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

更改result的声明以解决问题:

int result = 1;

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

您应该将1num1之间的数字相乘。将循环条件更改为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),所以它试图返回一个未初始化的变量。