Java 局部变量初始化和开关选择
我是学习java的新手,在这个例子中,我尝试模拟掷骰子游戏 当我没有初始化Java 局部变量初始化和开关选择,java,Java,我是学习java的新手,在这个例子中,我尝试模拟掷骰子游戏 当我没有初始化myPoint变量时,会出现编译器错误,所以在switchconstruct之前,我将其设置为零 我想了解为什么在声明后将myPoint变量的值设置为开关内sumOfDice的值时,我需要初始化该变量,与gameStatus变量不同 /***** roll dice game ****/ //some code here.. private enum Status { CONTINUE, WON, LOST
myPoint
变量时,会出现编译器错误,所以在switch
construct之前,我将其设置为零
我想了解为什么在声明后将myPoint
变量的值设置为开关内sumOfDice
的值时,我需要初始化该变量,与gameStatus
变量不同
/***** roll dice game ****/
//some code here..
private enum Status { CONTINUE, WON, LOST };
// plays one game of craps
public static void main( String[] args )
{
// point if no win or loss on first roll
int myPoint = 0;
Status gameStatus; // can contain CONTINUE, WON or LOST
int sumOfDice = rollDice(); // first roll of the dice
// determine game status and point based on first roll
switch ( sumOfDice )
{
case SEVEN: // win with 7 on first roll
case YO_LEVEN: // win with 11 on first roll
gameStatus = Status.WON;
break;
case SNAKE_EYES: // lose with 2 on first roll
case TREY: // lose with 3 on first roll
case BOX_CARS: // lose with 12 on first roll
gameStatus = Status.LOST;
break;
default: // did not win or lose, so remember point
gameStatus = Status.CONTINUE; // game is not over
myPoint = sumOfDice; // remember the point
System.out.printf( "Point is %d\n", myPoint );
break; // optional at end of switch
} // end switch
// rest of the code here ..
// display won or lost message
// roll dice, calculate sum and display results
public static int rollDice()
{
// return sum of dice
}
} // end class Craps
在您的
开关情况下
,任何路径都将初始化gameStatus
变量
对于myPoint
,情况并非如此,因此编译器会抱怨缺少初始化。根据
局部变量(§14.4,§14.14)在使用前必须通过初始化(§14.4)或赋值(§15.26)明确给定一个值,其方式可以使用明确赋值规则(§16)进行验证
for switch语句有效地强制您在switch语句的每个可能执行路径中初始化变量
因此答案是:
变量通过switch语句在每个可能的执行路径中初始化,因此编译器感到满意李>gameStatus
不会被初始化,例如,myPoint
是sumOfDice
,因此编译器强制您在开关块之外初始化变量SEVEN
default
块之外的某个地方使用myPoint变量,在那里它可能未初始化。