Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Intro_Java_brief_Liang2011.pdf
Скачиваний:
194
Добавлен:
26.03.2016
Размер:
10.44 Mб
Скачать

204 Chapter 6 Single-Dimensional Arrays

Video Note

Lotto numbers

6.3 Problem: Lotto Numbers

Each ticket for the Pick-10 lotto has 10 unique numbers ranging from 1 to 99. Suppose you buys a lot of tickets and like to have them cover all numbers from 1 to 99. Write a program that reads the ticket numbers from a file and checks whether all numbers are covered. Assume the last number in the file is 0. Suppose the file contains the numbers

80

3

87 62

30 90 10

21 46

27

12

40 83

9

39 88 95

59 20

37

80

40 87

67 31 90

11 24

56 77

11

48 51

42 8 74 1 41

36 53

52

82 16

72 19 70

44 56

29 33

54

64 99

14 23 22

94 79

55 2

60

86 34

4

31 63 84

89 7 78

43

93 97

45 25 38

28 26

85 49

47

65 57

67 73 69

32 71

24 66

92

98 96

77 6 75 17

61 58

13

35

81 18

15 5 68 91

50 76

 

0

 

 

 

 

 

 

 

 

 

Your program should display

The tickets cover all numbers

Suppose the file contains the numbers

11

48 51

42 8 74 1 41

36 53

52

82 16

72 19 70

44 56

29 33

0

 

 

 

 

 

Your program should display

The tickets don't cover all numbers

How do you mark a number as covered? You can create an array with 99 boolean elements. Each element in the array can be used to mark whether a number is covered. Let the array be isCovered. Initially, each element is false, as shown in Figure 6.2(a). Whenever a number is read, its corresponding element is set to true. Suppose the numbers entered are 1, 2, 3, 99, 0. When number 1 is read, isCovered[0] is set to true (see Figure 6.2(b)). When number 2 is read, isCovered[2 - 1] is set to true (see Figure 6.2(c)). When number 3 is read,

isCovered

 

 

isCovered

 

isCovered

 

isCovered

 

isCovered

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[0]

false

[0]

 

true

 

[0]

 

true

[0]

 

true

[0]

 

true

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[1]

false

[1]

 

false

[1]

 

 

 

[1]

 

true

[1]

 

true

 

 

true

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[2]

false

[2]

 

false

[2]

 

false

[2]

 

 

 

[2]

 

true

 

 

 

true

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[3]

false

[3]

 

false

[3]

 

false

[3]

 

false

[3]

 

false

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

.

 

 

 

.

 

 

 

.

 

 

 

.

 

 

.

 

 

 

.

 

 

 

.

 

 

 

.

 

 

 

.

 

 

.

 

 

 

.

 

 

 

.

 

 

 

.

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[97]

false

[97]

 

false

[97]

 

false

[97]

 

false

[97]

 

false

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[98]

false

[98]

 

false

[98]

 

false

[98]

 

false

[98]

 

 

 

 

 

 

 

true

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(a)

 

 

 

 

(b)

 

 

 

(c)

 

 

 

(d)

 

 

 

(e)

FIGURE 6.2 If number i appears in a Lotto ticket, isCovered[i-1] is set to true.

6.3 Problem: Lotto Numbers 205

isCovered[3 - 1] is set to true (see Figure 6.2(d)). When number 99 is read, set isCovered[98] to true (see Figure 6.2(e)).

The algorithm for the program can be described as follows:

for each number k read from the file,

mark number k as covered by setting isCovered[k – 1] true;

if every isCovered[i] is true The tickets cover all numbers

else

The tickets don't cover all numbers

The complete program is given in Listing 6.1.

LISTING 6.1 LottoNumbers.java

1 import java.util.Scanner;

2

3 public class LottoNumbers {

4 public static void main(String args[]) {

5Scanner input = new Scanner(System.in);

6

boolean[] isCovered = new boolean[99]; // Default is false

create and initialize array

7

 

 

8// Read each number and mark its corresponding element covered

9

int number = input.nextInt();

read number

10

while (number != 0) {

 

11

isCovered[number - 1] = true;

mark number covered

12

number = input.nextInt();

read number

13

}

 

14

 

 

15// Check whether all covered

16boolean allCovered = true; // Assume all covered initially

17for (int i = 0; i < 99; i++)

18if (!isCovered[i]) {

19allCovered = false; // Find one number not covered

20break;

21}

22

 

 

23

// Display result

 

24

if (allCovered)

check allCovered?

25System.out.println("The tickets cover all numbers");

26else

27System.out.println("The tickets don't cover all numbers");

28}

29}

Suppose you have created a text file named LottoNumbers.txt that contains the input data 2 5 6 5 4 3 23 43 2 0. You can run the program using the following command:

java LottoNumbers < LottoNumbers.txt

The program can be traced as follows:

The program creates an array of 99 boolean elements and initializes each element to false (line 6). It reads the first number from the file (line 9). The program then repeats the following operations in a loop:

If the number is not zero, set its corresponding value in array isCovered to true (line 11);

Read the next number (line 12).

206 Chapter 6 Single-Dimensional Arrays

line

Representative elements in array isCovered

number

allCovered

 

 

[1]

[2]

[3]

[4]

[5]

[22]

[42]

 

 

6

false

false

false

false

false

false

false

 

 

9

 

 

 

 

 

 

2

 

 

11

true

 

 

 

 

 

 

 

 

12

 

 

 

 

 

 

5

 

 

11

 

 

 

true

 

 

 

 

 

12

 

 

 

 

 

 

6

 

 

11

 

 

 

 

true

 

 

 

 

12

 

 

 

 

 

 

5

 

 

11

 

 

 

true

 

 

 

 

 

12

 

 

 

 

 

 

4

 

 

11

 

 

true

 

 

 

 

 

 

12

 

 

 

 

 

 

3

 

 

11

 

true

 

 

 

 

 

 

 

12

 

 

 

 

 

 

23

 

 

11

 

 

 

 

 

true

 

 

 

12

 

 

 

 

 

 

43

 

 

11

 

 

 

 

 

 

true

 

 

12

 

 

 

 

 

 

2

 

 

11

true

 

 

 

 

 

 

 

 

12

 

 

 

 

 

 

0

 

 

16

 

 

 

 

 

 

 

true

18(i=0)

 

 

 

 

 

 

 

false

 

 

 

 

 

 

 

 

 

 

 

When the input is 0, the input ends. The program checks whether all numbers are covered in lines 16–21 and displays the result in lines 24–27.

6.4 Problem: Deck of Cards

The problem is to write a program that picks four cards randomly from a deck of 52 cards. All the cards can be represented using an array named deck, filled with initial values 0 to 51, as follows:

int[] deck = new int[52];

// Initialize cards

for (int i = 0; i < deck.length; i++) deck[i] = i;

Card numbers 0 to 12, 13 to 25, 26 to 38, 39 to 51 represent 13 Spades, 13 Hearts, 13 Diamonds, and 13 Clubs, respectively, as shown in Figure 6.3. After shuffling the array deck, pick the first four cards from deck. cardNumber / 13 determines the suit of the card and cardNumber % 13 determines the rank of the card.

Listing 6.2 gives the solution to the problem.

6.4 Problem: Deck of Cards 207

LISTING 6.2 DeckOfCards.java

1 public class DeckOfCards {

2public static void main(String[] args) {

3

int[] deck = new

int[52];

create array deck

4

String[] suits =

{"Spades", "Hearts", "Diamonds", "Clubs"};

array of strings

5

String[] ranks =

{"Ace", "2", "3", "4", "5", "6", "7", "8", "9",

array of strings

6

"10", "Jack", "Queen", "King"};

 

7

 

 

 

8// Initialize cards

9

for (int i = 0; i < deck.length; i++)

initialize deck

10

deck[i] = i;

 

11

 

 

12

// Shuffle the cards

 

13

for (int i = 0; i < deck.length; i++) {

shuffle deck

14// Generate an index randomly

15int index = (int)(Math.random() * deck.length);

16int temp = deck[i];

17deck[i] = deck[index];

18deck[index] = temp;

19}

20

21// Display the first four cards

22for (int i = 0; i < 4; i++) {

23

String

suit

=

suits[deck[i]

/

13];

suit of a card

24

String

rank

=

ranks[deck[i]

%

13];

rank of a card

25System.out.println("Card number " + deck[i] + ": "

26+ rank + " of " + suit);

27}

28}

29}

Card number 6: 7 of Spades

Card number 48: 10 of Clubs

Card number 11: Queen of Spades

Card number 24: Queen of Hearts

 

 

 

deck

 

 

deck

 

 

 

 

 

 

0

 

 

[0]

0

[0]

6

 

 

 

 

 

Card number 6 is

 

 

 

 

 

 

 

.

 

 

.

.

[1]

48

 

 

 

 

 

7 of Spades

.

13 Spades (

)

.

.

[2]

11

 

 

 

 

 

 

.

 

 

.

.

[3]

24

 

 

 

 

 

Card number 48 is

 

 

 

 

 

 

 

12

 

 

[12]

12

[4]

.

 

 

 

 

 

 

 

 

 

 

 

 

10 of Clubs

13

 

 

[13]

13

[5]

.

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

.

.

.

.

 

 

 

 

 

 

.

13 Hearts (

)

 

 

 

 

 

 

.

.

.

.

 

 

 

 

 

Card number 11 is

.

 

 

 

 

 

 

 

.

.

.

.

 

 

 

 

 

 

 

 

 

 

 

 

Queen of Spades

 

 

 

 

 

 

 

 

25

 

 

[25]

25

 

Random shuffle [25]

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

26

 

 

[26]

26

 

 

[26]

.

 

 

 

 

 

 

.

 

 

.

.

.

.

 

 

 

 

 

Card number 24 is

.

13 Diamonds ( )

 

 

 

 

 

.

.

.

.

 

 

 

 

 

 

 

 

 

 

.

 

 

.

.

.

.

 

 

 

 

 

Queen of Hearts

 

 

 

 

 

 

 

 

 

38

 

 

[38]

38

[38]

.

 

 

 

 

 

 

39

 

 

[39]

39

[39]

.

 

 

 

 

 

 

.

 

 

.

.

.

.

 

 

 

 

 

 

.

13 Clubs ( )

 

 

 

 

 

 

 

 

.

.

.

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

.

.

.

.

 

 

 

 

 

 

51

 

 

 

 

 

 

 

 

 

 

[51]

51

[51]

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FIGURE 6.3 52 cards are stored in an array named deck.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]