0

这是我的方法。对于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();

        }

}
4

6 回答 6

1

您必须在代码的其他地方声明了类似的内容:

int iScore1;
int iScore2;
int iScore3;

相反,您应该这样做:

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

基本上,您需要先初始化这些值,然后再使用它们。否则,你会得到变量可能没有被初始化的错误。

您可能会争辩说,这些值将在分支内初始化,该iOption == 1分支总是在分支之前执行iOption == 2。不幸的是,编译器没有你聪明,因此提出了投诉。

于 2013-10-23T04:27:49.280 回答
1

因为您正在if语句中进行初始化。这个if块只会在iOption==1. 如果此条件失败并进入iOption==2,它将不得不在iScore1没有已知初始值的情况下打印等。if因此,您需要在某处之前初始化它们。只需将其设置为0以防万一您不需要它具有任何其他值。

于 2013-10-23T04:12:57.340 回答
1

局部变量没有被赋予初始默认值。因此,您必须在使用局部变量之前分配一个值。

在您的情况下,您仅在 if 条件内进行初始化。

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

原始答案

于 2013-10-23T04:18:01.160 回答
1

不,它尚未初始化,因为您的初始化在if语句中。如果 会发生什么iOption=2?的值iScore1是未定义的,因为第一个if语句被跳过。其中的代码不会被执行。我假设您想将这些初始化行放在第一个if.

于 2013-10-23T04:08:53.923 回答
1

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

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

于 2013-10-23T04:09:12.373 回答
0

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

于 2013-10-23T04:10:26.043 回答