declare and initialize variables in java

this code is for craps game (Deitel java how to program)

why myPoint variable needs to be initialize and if not a compilation error will occur???

i mean if there is win or loss in first roll there is no need to initialize mypoint (because it is not being use anymore)

and if there is no win or loss in first roll, myPoint gets value in switch default label

import java.util.Random; public class Craps { // create random number generator for use in method rollDice private static final Random randomNumbers = new Random(); // enumeration with constants that represent the game status private enum Status { CONTINUE, WON, LOST }; // constants that represent common rolls of the dice private static final int SNAKE_EYES = 2; private static final int TREY = 3; private static final int SEVEN = 7; private static final int YO_LEVEN = 11; private static final int BOX_CARS = 12; // plays one game of craps public static void main( String[] args ) { int myPoint = 0; // point if no win or loss on first roll 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 // while game is not complete while ( gameStatus == Status.CONTINUE ) // not WON or LOST { sumOfDice = rollDice(); // roll dice again // determine game status if ( sumOfDice == myPoint ) // win by making point gameStatus = Status.WON; else if ( sumOfDice == SEVEN ) // lose by rolling 7 before point gameStatus = Status.LOST; } // end while // display won or lost message if ( gameStatus == Status.WON ) System.out.println( "Player wins" ); else System.out.println( "Player loses" ); } // end main // roll dice, calculate sum and display results public static int rollDice() { // pick random die values int die1 = 1 + randomNumbers.nextInt( 6 ); // first die roll int die2 = 1 + randomNumbers.nextInt( 6 ); // second die roll int sum = die1 + die2; // sum of die values // display results of this roll System.out.printf( "Player rolled %d + %d = %d\n", die1, die2, sum ); return sum; // return sum of dice } // end method rollDice } // end class Craps


You need to initialize myPoint because not all paths through the code that lead to the first use of the variable (i.e. the sumOfDice == myPoint inside an if) make an assignment to myPoint.

Specifically, this would happen if sumOfDice is equal to any value that falls outside the default case of the switch statement.

Unlike member variables that are default-initialized, local variables need to be initialized explicitly. If the compiler finds a path where an unassigned variable is used, it produces an error.

Local variables in Java are created on the stack. At runtime, it's not know what will be in that memory position, so this is considered "garbage". The compiler / runtime does not initialize local variables, only instance (and static) ones.

That's why you always need to init your local variables in Java. If not, the compiler complains

Category:java Time:2017-12-04 Views:2

Related post

Copyright (C), All Rights Reserved.

processed in 0.817 (s). 13 q(s)