input.txt:
Team India
Rohit Sharma, 45
KL Rahul, 1
Shubman Gill, 77
Virat Kohli, 18
SK Yadav, 63
MS Dhoni, 07
Ravindra Jadeja, 08
Hardik Pandya, 33
R Ashwin, 99
Jasprit Bumrah, 93
Mohammed Shami, 11
Team Australia
David Warner, 31
Matthew Wade, 13
Steve Smith, 49
Mitchell Marsh, 56
Marcus Stoinis, 17
Pat Cummins, 30
Glenn Maxwell, 32
Chris Green, 05
Kane Richardson, 55
Nathan Ellis, 12
Mitchell Starc, 56

PlayerNGTest.java:
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/UnitTests/EmptyTestNGTest.java to edit this template
 */
package edu.nwmissouri.spring24.cs44542.sec03.cricket;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

/**
 *
 * @author varunrachakatla
 */
public class PlayerNGTest {
   
  public PlayerNGTest() {
  }

  @BeforeClass
  public static void setUpClass() throws Exception {
  }

  @AfterClass
  public static void tearDownClass() throws Exception {
  }

  @BeforeMethod
  public void setUpMethod() throws Exception {
  }

  @AfterMethod
  public void tearDownMethod() throws Exception {
  }
   
  @Test
  public void testAddRuns() {
    Player player = new Player("John", 7);
    player.addRuns(20);
    assertEquals(20, player.getRunsScored());
  }

  @Test
  public void testIsOut() {
    Player player = new Player("Jane", 11);
    assertFalse(player.isIsOut());
    player.setIsOut(true);
    assertTrue(player.isIsOut());
  }

  @Test
  public void testGetStrikeRate() {
    Player player = new Player("Bob", 77);
    player.addRuns(30);
    player.setBalls(20);
    assertEquals(150.0, player.getStrikeRate(), 0.01);
  }

  @Test
  public void testGetPlayerStats() {
    Player player = new Player("Alice", 3);
    player.addRuns(40);
    player.setBalls(30);
    player.setIsOut(true);

    String expectedStats = "+-----------------+------------+--------------+--------------+------------+\n" +
                "| Alice      | 40     | 30      | 133.33    | Out    |";

    assertEquals(expectedStats, player.getPlayerStats());
  }

  @Test
  public void testToString() {
    Player player = new Player("Charlie", 99);
    player.addRuns(15);
    player.setBalls(10);

    assertEquals("Charlie: 15(10)", player.toString());
  }

  @Test
  public void testGetJerseyNum() {
    Player player = new Player("David", 55);
    assertEquals(55, player.getJerseyNum());
  }


  /**
   * Test of getName method, of class Player.
   */
  @Test
  public void testGetName() {
    System.out.println("getName");
    Player instance = new Player("Charlie", 99);
    String expResult = "Charlie";
    String result = instance.getName();
    assertEquals(result, expResult);
  }

  /**
   * Test of getRunsScored method, of class Player.
   */
  @Test
  public void testGetRunsScored() {
    System.out.println("getRunsScored");
    Player instance = new Player("Charlie", 99);
    int expResult = 10;
    instance.addRuns(expResult);
     
    int result = instance.getRunsScored();
    assertEquals(result, expResult);
  }
   
  /**
   * Test of isIsOut method, of class Player.
   */
  @Test
  public void testIsIsOut() {
    System.out.println("isIsOut");
    Player instance = new Player("Charlie", 99);
    boolean expResult = false;
    boolean result = instance.isIsOut();
    assertEquals(result, expResult);
  }

  /**
   * Test of setIsOut method, of class Player.
   */
  @Test
  public void testSetIsOut() {
    System.out.println("setIsOut");
    boolean isOut = true;
    Player instance = new Player("Charlie", 99);
    instance.setIsOut(isOut);
    assertEquals(instance.isIsOut(), isOut);
  }


  /**
   * Test of setJerseyNum method, of class Player.
   */
  @Test
  public void testSetJerseyNum() {
    System.out.println("setJerseyNum");
    int jerseyNum = 12;
    Player instance = new Player("Charlie", 99);
    instance.setJerseyNum(jerseyNum);
    assertEquals(instance.getJerseyNum(), jerseyNum);
     
  }

  /**
   * Test of getBalls method, of class Player.
   */
  @Test
  public void testGetBalls() {
    System.out.println("getBalls");
    Player instance = new Player("Charlie", 99);
    int expResult = 6;
    instance.setBalls(expResult);
    int result = instance.getBalls();
    assertEquals(result, expResult);
  }

  /**
   * Test of setBalls method, of class Player.
   */
  @Test
  public void testSetBalls() {
    System.out.println("setBalls");
    int balls = 12;
    Player instance = new Player("Charlie", 99);
    instance.setBalls(balls);
    assertEquals(instance.getBalls(), balls);
     
  }
   
}

Class Player: The Player class contains the attributes mentioned in Table 1. All
attributes are private.
Table 1 Attributes of Player class
Attribute Type Attribute Description
name String Name of the player
runsScored int Number of runs scored by each player
balls int Number of balls played by player
jerseyNum int Jersey number of player
isOut boolean A Boolean value representing whether a player is
out or not out
1) Write a constructor with the arguments name and jerseyNum.
2) Write getter and setter methods for all the attributes mentioned in Table1.
3) getStrikeRate(): This method computes and returns the strike rate of a
batsman in cricket by dividing the runs scored by the number of balls faced,
multiplied by 100. If the batsman has not faced any balls, it returns 0.0.
4) getPlayerStats(): This method creates and returns a formatted string
presenting a cricket player’s statistics, including name, runs scored, balls faced,
strike rate and wicket status.
5) toString(): This method returns a String.
a. If the player is not out, string format is Player Name: Runs (Balls) *.
i. For example, Shubman Gill: 0(0) *
b. If the player is out, string format is Player Name: Runs (Balls).
i. For example, Shubman Gill: 0(0)

Class PlayersList: The PlayerList class contains the attributes mentioned in Table 2.
All attributes are private.
Table 2 Attributes of PlayerList class
Attribute Type Attribute Description
DEFAULT_CAPACITY int Default capacity of players list which
has a final integer value of 10
players Player[] An array of type Player
size int Number of players in PlayersList
1) Constructors: There will be both parameterized and no-argument constructors.
Former takes an argument initialCapacity that initializes the players
array using it. Later initializes the players array using the
DEFAULT_CAPACITY.
2) size(): Returns the current size of the player list.
3) isEmpty(): Checks if the player list is empty and returns a boolean value
accordingly.
4) ensureCapacity(): Doubles the array capacity if the current size equals the
array length.
5) add(Player player): Adds a player to the array, ensuring that the capacity
is adjusted if needed.
6) get(int index): Retrieves and returns the player at the specified index.
7) remove(int index): Removes the player at the given index, shifting
remaining elements to fill the gap.
8) indexOf(Player player): Finds and returns the index of the specified
player in the list. This method returns -1 if not found.
Class Ball: The Ball class contains the following methods:
1) hitSix(): This method represents a cricket shot, generating a random score
between 0 and 6. If the outcome is 6 or 5, it returns 6; otherwise, it returns -1. The
return type of this method is an integer value representing the cricket shot score.
2) hit(): This method represents a cricket shot for a score of 4, 2, or 1 based on a
random outcome. If the outcome is 4, it returns 4; if the outcome is 2, it returns 2;
if the outcome is 1, it returns 1; otherwise, it returns -1. The return type of this
method is an integer value representing the cricket shot score.
3) playDefense(): This method represents defensive play in cricket, providing a
random defensive score of 2, 1, or 0. If the outcome is 2, it returns 2; if the outcome
is 1, it returns 1; if the outcome is 0, it returns 0; otherwise, it returns -1. The
return type of this method is an integer value representing the defensive play
score.