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
Get step-by-step solutions from verified subject matter experts
