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
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////