Question: This is a Java program that simulates a game of Bingo: class Bingo { private Player[] players; public Bingo(Player[] players) { this.players = players; }

This is a Java program that simulates a game of Bingo:

class Bingo {

private Player[] players;

public Bingo(Player[] players) {

this.players = players;

}

public String play(int number) {

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

players[i].markNumber(number);

}

String winners = "";

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

if (players[i].isWinner())

winners += players[i].getName() + " ";

}

return winners;

}

}

class Player {

private String name;

private Card[] cards;

public Player(String name, Card[] cards) {

this.name = name;

this.cards = cards;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Card[] getCards() {

return cards;

}

public boolean isWinner() {

boolean winner = true;

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

for (int x = 0; x < 3; x++) {

for (int y = 0; y < 5; y++) {

winner = winner && cards[i].isMarked(x + 1, y + 1);

}

if (winner == true) {

return true;

}

}

}

return false;

}

public void markNumber(int number) {

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

cards[i].markNumber(number);

}

}

}

class Card {

private int[][] number;

private boolean[][] check = new boolean[3][5];

public Card(int[][] numbers) {

this.number = numbers;

}

public int getNumber(int Row, int Column) {

return number[Row - 1][Column - 1];

}

public boolean isMarked(int row, int column) {

return check[row - 1][column - 1];

}

public void markNumber(int number) {

for (int x = 0; x < 3; x++) {

for (int y = 0; y < 5; y++) {

if (this.number[x][y] == number) {

this.check[x][y] = true;

}

}

}

}

}

This is a sample main method:

public static void main(String[] args){

System.out.println("Enter how many players there are");

Player[] players = new Player[scan.nextInt()];

for(int p = 0; p < players.length; p++) {

System.out.println("How many cards does player " + p + " have?");

Card[] cards = new Card[scan.nextInt()];

for(int c = 0; c < cards.length; c++) {

System.out.println("Please enter 25 numbers for card " + c + " of player " + p);

int[][] numbers = new int[5][5];

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

for(int j = 0; j < numbers[i].length; j++) {

numbers[i][j] = scan.nextInt();

}

}

cards[c] = new Card(numbers);

}

players[p] = new Player("Player" + p, cards);

}

Bingo bingo = new Bingo(players);

Random random = new Random();

System.out.println("Please enter how many numbers will be called");

int[] calledNums = new int[scan.nextInt()];

System.out.println("Please enter " + calledNums.length + " numbers to be called in order");

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

calledNums[i] = scan.nextInt();

}

String winners = "";

int idx = 0;

while(winners.equals("")){

winners = bingo.play(calledNums[idx]);

idx++;

}

System.out.println(winners);

}

For some reason, if there are more than 2 players entered into the program, it causes an ArrayIndexOutOfBoundsException. How can this be fixed?

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!