Java Reference
In-Depth Information
array. The first time the
for
loop is executed, the variable
el
will be assigned the first
element of the array. The second time the
for
loop is executed, the variable will be assigned
the second element of the array and so on. The new code seems cleaner and easier to write
and understand. The only caveat is that a for-each
for
loopcanbeusedtoreadanarrayof
elements, but not to populate it. For example, it is tempting to apply our new knowledge
of the for-each
for
loop and rewrite the
rollDice
method as follows.
public static void
rollDice()
{
for
(
int
el : dice)
{
el = getRandomDieValue () ;
}
}
Unfortunately, this rewrite is wrong. It modifies the variable
el
multiple times, but it does
not change the array in any way. As a general rule, a for-each
for
loop cannot be used to
modify an array; it can only be used to examine its content. The reason is that it iterates
through an array and it assigns the elements of the array to a variable. Obviously, this in
no way changes the content of the array.
As a different example, the
isYahtzee
method only examines the dice without modifying
them. Therefore, it can be rewritten as follows.
public static boolean
isYahtzee()
{
for
(
int
el : dice)
{
if
(el != dice[0])
{
return false
;
}
return true
;
}
As a general rule, use the for-each
for
loop when you want to examine the content
of an array but you do not want to modify the array. Most of the time, the for-each
for
loop is preferred to the regular
for
loop because it makes the code cleaner and
easier to understand.
We are finally ready to present the first iteration of the Yahtzee game.
import
java . util .
;
∗
public class
Yahtzee
{
static final int
NUMBER OF DICE = 5 ;
static final int
NUM REROLLS = 2 ;
static int
[] dice =
new i n t
[ NUMBER OF DICE ] ;
public static void
main(String [] args)
{
Scanner keyboard =
new
Scanner(System. in) ;
rollDice() ;
for
(
int
i=0;i
<
NUM REROLLS ;
i ++)
{
if
(isYahtzee())
{
// no need to continue i f we got Yahtzee
break
;
System.out . println(diceToString()) ;
//prints the dice
System. out . print (
"Which dice do you want to reroll: "
);