In: Computer Science
Java. I have class ScoreBoard that holds a 2d array of each player's score. COde Bellow
Example:
Score 1 | score 2 | |
Player1 | 20 | 21 |
Player2 | 15 | 32 |
Player3 | 6 | 7 |
Using the method ScoreIterator so that it returns anonymous object of type ScoreIterator , iterate over all the scores, one by one. Use the next() and hasNext() public interface ScoreIterator { int next(); boolean hasNext();
Class ScoreBoard :
import java.util.*; public class ScoreBoard { int[][] scores ; public ScoreBoard (int numOfPlayers, int numOfRounds) { scores = new int[numOfPlayers][numOfRounds]; Random rand = new Random(); for (int i = 0; i < numOfPlayers; i++) { for (int j = 0; j < numOfRounds; j++) { scores [i][j] = 50 + rand.nextInt(51); } } } public ScoreIterator scoreIterator () { // return anonymous object of type ScoreIterator } public static void main(String[] args) { ScoreBoard sb = new ScoreBoard (3, 2); ScoreIterator iterator = sb.ScoreIterator (); while (iterator.hasNext()) { System.out.println(iterator.next()); } } }
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CODE TO COPY
ScoreBoard.java
import java.util.*;
public class ScoreBoard {
int[][] scores;
public ScoreBoard(int numOfPlayers, int
numOfRounds) {
scores = new
int[numOfPlayers][numOfRounds];
Random rand = new Random();
for (int i = 0; i <
numOfPlayers; i++) {
for (int j = 0;
j < numOfRounds; j++) {
scores[i][j] = 50 + rand.nextInt(51);
}
}
}
public ScoreIterator scoreIterator() {
ScoreIterator si = new
ScoreIterator() {
private int
row = 0;
private int col
= 0;
@Override
public int
next() {
if (hasNext()) {
while (row <
scores.length) {
while (col
< scores[0].length) {
int x = scores[row][col];
col++;
if (col == scores[0].length) {
col = 0;
row++;
}
return x;
}
row++;
}
}
return 0;
}
@Override
public boolean
hasNext() {
return row < scores.length && col
< scores[0].length;
}
};
return si;
}
public static void main(String[] args) {
ScoreBoard sb = new ScoreBoard(3,
2);
System.out.println("using for
loop");
for (int i = 0; i <
sb.scores.length; i++) {
for (int j = 0;
j < sb.scores[0].length; j++) {
System.out.println(sb.scores[i][j]);
}
}
System.out.println("----------------");
System.out.println("using
iterator");
ScoreIterator iterator =
sb.scoreIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ScoreIterator.java
public interface ScoreIterator {
int next();
boolean hasNext();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
EXPLANATION
import java.util.*; // for using random class
public class ScoreBoard { // creating a class names
ScoreBoard
int[][] scores; // to store numbers in 2d array
public ScoreBoard(int numOfPlayers, int
numOfRounds) { //constructor to intialize scores
scores = new
int[numOfPlayers][numOfRounds];
Random rand = new Random(); //
creating a random object rand
for (int i = 0; i <
numOfPlayers; i++) { // for loop for rows
for (int j = 0;
j < numOfRounds; j++) { // for loop for each element in
row
scores[i][j] = 50 + rand.nextInt(51); //
generating a random number
}
}
}
public ScoreIterator scoreIterator() { // creating
a scoreiterator method which returns ScoreIterator object
anonymously
ScoreIterator si = new
ScoreIterator() { //creating a ScoreIterator object si
private int
row = 0; // set row as 0
private int col
= 0; // set col as 0
@Override
public int
next() { // to return next element
if (hasNext()) { // if the scores array has
elements
while (row <
scores.length) { // then check if the row is not at the end
while (col
< scores[0].length) { // check if the column is not at the
end
int x = scores[row][col]; // get the element at
the position
col++; // increase column by 1
if (col == scores[0].length) { // if element is
at the end of the row
col = 0; // set col as
0
row++; // increase row by
1
}
return x; // return the number
}
row++; //
increase the row number after each element is returned, in order to
return the number
}
}
return 0; // return 0 if no number is
found
}
@Override
public boolean
hasNext() {
return row < scores.length && col
< scores[0].length; // check if the row and col are inside the
range
}
};
return si; //return the
object
}
public static void main(String[] args) {
ScoreBoard sb = new ScoreBoard(3,
2);
//remove these lines and for loop if needed, this was only to check the elements and show you
System.out.println("using for
loop"); // printing statement
for (int i = 0; i <
sb.scores.length; i++) { // for loop for row
for (int j = 0;
j < sb.scores[0].length; j++) { // for loop for each element in
row
System.out.println(sb.scores[i][j]); // print
the element
}
}
System.out.println("----------------"); // printing line
System.out.println("using
iterator"); // printing statement
ScoreIterator iterator =
sb.scoreIterator(); // creating a iterator using the method which
return the object anonymously
while (iterator.hasNext()) { //
while loop to check if element exsists
System.out.println(iterator.next()); // printing the element
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
OUTPUT
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IF YOU HAVE ANY DOUBTS REGARDING THE SOLUTION PLEASE COMMENT BELOW I WILL HELP YOU
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////