解决变量可能没有初始化错误

时间:2013-10-23 04:07:07

标签: java

这是我的方法。对于iOption ==2,它表示iScore1 iScore2iScore3尚未初始化,即使它们是通过iOption == 1.初始化的,程序必须先使用iOption 1才能使用iOption2

while (iOption != '6')
{
    if(iOption == 1)
    {
        iScore1 = Utility.testScore();
        iScore2 = Utility.testScore();
        iScore3 = Utility.testScore();

        Utility.pressEnterToContinue();
        Utility.clearScreen();

        iOption = Utility.menuOption();
    }

    if(iOption == 2) 
    {


                System.out.println("\n\tScore 1: " + iScore1);
                System.out.println("\n\tScore 2: " + iScore2);
                System.out.println("\n\tScore 3: " + iScore3);

                System.out.println("\n");

                Utility.pressEnterToContinue();
                Utility.clearScreen();

                iOption = Utility.menuOption();


    }

        if(iOption == 3)
        {



                dGrade = Utility.calcAverage(iScore1, iScore2, iScore3);


                System.out.println("Average: " + dGrade);
                System.out.println("\n");

                Utility.pressEnterToContinue();
                Utility.clearScreen();

                iOption = Utility.menuOption();

        }

        if(iOption == 4)
        {



                cLetter2 = Utility.letterGrade(dGrade);

                System.out.print("Letter grade: " + cLetter2);


                System.out.println("\n");

                Utility.pressEnterToContinue();
                Utility.clearScreen();

                iOption = Utility.menuOption();

        }

        if(iOption == 5)
        {

                    Utility.calcGPA();

                    Utility.pressEnterToContinue();
                    Utility.clearScreen();

                    iOption = Utility.menuOption();

        }

}

6 个答案:

答案 0 :(得分:1)

不,它尚未初始化,因为您的初始化在if语句中。如果iOption=2会怎样?那么iScore1的值是未定义的,因为跳过了第一个if语句。其中的代码未执行。我假设你想把这些初始化行放在第一个if之前。

答案 1 :(得分:1)

原因可能是由于iScore1 iScore2 and iScore3是局部变量,这意味着它在ssome方法中声明并且未初始化。正如RJ指出,因为赋值是有条件的,它给出了未初始化的错误。第二条if条件所以你需要先将它初始化

将其初始化为某个值或将其作为类变量 如果将这些变为类变量,那么将使用它们的默认值对其进行初始化。 例如,如果这些是int,那么它将被初始化为0,或者如果这些是Strings,那么这些将被初始化为null

答案 2 :(得分:1)

因为您正在if语句中进行初始化。此if块仅在iOption==1时执行。如果此条件失败并且输入iOption==2,则必须打印iScore1等没有已知的初始值。因此,您需要在某个地方if之前初始化它们。只需将其设置为0,以防您不需要任何其他值。

答案 3 :(得分:1)

本地变量未给出初始默认值。因此,您必须在使用局部变量之前指定一个值。

我的情况是你只在条件内初始化。

使用"明显"进行类似的尝试条件如if(1> 0){}。编译器编译而不是对代码进行分析。虽然对于人来说很明显会发生一些事情,java编译器没有代码来检测这种情况,也没有用java语法指定。因此,您希望编译器能够保持编译清晰,可预测和快速的AI。

Original answer

答案 4 :(得分:1)

您必须在代码中的其他位置声明类似内容:

int iScore1;
int iScore2;
int iScore3;

相反,你应该这样做:

int iScore1 = 0;
int iScore2 = 0;
int iScore3 = 0;

基本上,您需要先使用它们之前初始化值。否则,您将获得变量可能尚未初始化错误。

您可能认为这些值已在iOption == 1分支内初始化,该分支始终在iOption == 2分支之前执行。不幸的是,编译器并不像你那么聪明,因此提出了投诉。

答案 5 :(得分:0)

它不是javaScript,使其自动初始化。您需要在课程级别或方法级别声明中初始化iScore1 iScore2和iScore3。