这是我的方法。对于iOption ==2
,它表示iScore1
iScore2
和iScore3
尚未初始化,即使它们是通过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();
}
}
答案 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。
答案 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。