Construct a java method This method chooses the number of s

Construct a java method.

   * This method chooses the number of sticks to pick up based on the
   * sticksRemaining and actionRanking parameters.
   *
   * Algorithm: If there are less than Config.MAX_ACTION sticks remaining
   * then the chooser must pick the minimum number of sticks (Config.MIN_ACTION).
   * For Config.MAX_ACTION or more sticks remaining then pick based on the
   * actionRanking parameter.
   *
   * The actionRanking array has one element for each possible action. The 0
   * index corresponds to Config.MIN_ACTION and the highest index corresponds
   * to Config.MAX_ACTION. For example, if Config.MIN_ACTION is 1 and
   * Config.MAX_ACTION is 3, an action can be to pick up 1, 2 or 3 sticks.
   * actionRanking[0] corresponds to 1, actionRanking[1] corresponds to 2, etc.
   * The higher the element for an action in comparison to other elements,
   * the more likely the action should be chosen.
   *
   * First calculate the total number of possibilities by summing all the
   * element values. Then choose a particular action based on the relative
   * frequency of the various rankings.
   * For example, if Config.MIN_ACTION is 1 and Config.MAX_ACTION is 3:
   * If the action rankings are {9,90,1}, the total is 100. Since
   * actionRanking[0] is 9, then an action of picking up 1 should be chosen
   * about 9/100 times. 2 should be chosen about 90/100 times and 1 should
   * be chosen about 1/100 times. Use Config.RNG.nextInt(?) method to
   * generate appropriate random numbers.
   *
   * @param sticksRemaining
   * The number of sticks remaining to be picked up.
   * @param actionRanking
   * The counts of each action to take. The 0 index corresponds to
   * Config.MIN_ACTION and the highest index corresponds to
   * Config.MAX_ACTION.
   * @return The number of sticks to pick up. 0 is returned for the following
   * conditions: actionRanking is null, actionRanking has a length of
   * 0, or sticksRemaining is <= 0.

Solution

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

String userName = \"\";

String intialStringError = \"\";

int intialSticks = 0;

String prompt = \"How many sticks are there on the table initially (10-100)? \";

//Max number of tries

int[] numSticksArray = new int[100];

boolean intialBooleanError = false;

boolean userChoiceDone = false;

int userChoice = 0;

String userError = \"\";

String friendName = \"\";

int userStickNum = 0;

String userStickError = \"\";

String friendStickError = \"\";

boolean friendTurnOver = true;

boolean userTurnOver = true;

int z = 0;

System.out.print(\"\ What is your name? \");

userName = input.nextLine();

System.out.println(\"Hello \" + userName.trim() + \".\");

intialSticks = promptUserForNumber(input, prompt, Config.MIN_STICKS, Config.MAX_STICKS);

System.out.println(\"\ Would you like to:\");

System.out.println(\" 1) Play against a friend\");

System.out.println(\" 2) Play against computer (basic)\");

System.out.println(\" 3) Play against computer with AI\");

do{

System.out.print(\"Which do you choose (1,2,3)? \");

if(input.hasNextInt())

{

userChoice = input.nextInt();

//input.nextLine();

if (userChoice >= 1 && userChoice <= 3) {

userChoiceDone = true;

}

else{

System.out.println(\"Please enter a number between 1 and 3.\");

userChoiceDone = false;

}

}

else

{

userError = input.nextLine();

System.out.println(\"Error: expected a number between 1 and 3 but found: \" + userError);

userChoiceDone = false;

}

} while(!userChoiceDone);

if(userChoice == 1) {

System.out.print(\"\ What is your friend\'s name? \");

friendName = input.next();

System.out.println(\"Hello \" + friendName.trim() + \".\");

playAgainstFriend(input, intialSticks, userName, friendName);

}

System.out.println(\"\ =========================================\");

System.out.println(\"Thank you for playing the Game of Sticks!\");

input.close();

}

static int promptUserForNumber(Scanner input, String prompt,

int min, int max) {

boolean intialBooleanError = false;

int intialSticks = 0;

int sticksTest;

String stringError = \"\";

do{

System.out.print(prompt);

if(input.hasNextInt())

{

sticksTest = input.nextInt();

//read to end of line then ignore

input.nextLine();

if (sticksTest >= min && sticksTest <= max) {

intialBooleanError = true;

intialSticks = sticksTest;

}

else{

System.out.println(\"Please enter a number between \" + min +

\" and \" + max + \".\");

intialBooleanError = false;

}

}

else

{

stringError = input.nextLine();

System.out.println(\"Error: expected a number between \" + min +

\" and \" + max +\" but found: \" + stringError);

intialBooleanError = false;

}

} while(!intialBooleanError);

return intialSticks; //TODO change to return valid user input.

}

/**

* This method has one person play the Game of Sticks against another

* person.

*

* @param input

* An instance of Scanner to read user answers.

* @param startSticks

* The number of sticks to start the game with.

* @param player1Name

* The name of one player.

* @param player2Name

* The name of the other player.

*

* As a courtesy, player2 is considered the friend and gets to

* pick up sticks first.

*

*/

static void playAgainstFriend(Scanner input, int startSticks,

String player1Name, String player2Name) {

//player1Name = input.nextLine();

// System.out.print(\"\ What is your friend\'s name? \");

//player2Name = input.nextLine();

//System.out.println(\"Hello \" + player2Name.trim() + \".\");

//TODO when sticksLeft is equal to 2, it prompts the friend to take sticks again

int userStickNum = 0;

boolean friendTurnOver = true;

boolean userTurnOver = true;

String userStickError = \"\";

String friendStickError = \"\";

// int z = 0;

System.out.print(\"\ There are \" + startSticks + \" sticks on the board.\");

int sticksLeft = startSticks;

for (int z = 0; sticksLeft > 0; z++) {

//Friend\'s turn

if (z % 2 == 0)

{

do {

String statement = \"\ \" + player2Name.trim() + \": How many sticks do you take (\" + Config.MIN_ACTION +

\"-\" + Math.min(Config.MAX_ACTION, sticksLeft) + \")?\";

userStickNum = promptUserForNumber(input, statement, Config.MIN_ACTION, Math.min(Config.MAX_ACTION, sticksLeft));

sticksLeft = sticksLeft - userStickNum;

if (sticksLeft == 0)

{

System.out.println(player1Name.trim() + \" wins. \" + player2Name.trim() + \" loses.\");

friendTurnOver = true;

break;

}

if (sticksLeft == 1)

{

System.out.print(\"There is \" + sticksLeft + \" stick on the board.\");

friendTurnOver = true;

//break;

}

else

{

System.out.print(\"There are \" + sticksLeft + \" sticks on the board.\");

friendTurnOver = true;

//break;

}

} while(!friendTurnOver);

}

//user turn

else if (z % 2 == 1)

{

do

{

String statement = \"\ \" + player1Name.trim() + \": How many sticks do you take (\" + Config.MIN_ACTION +

\"-\" + Math.min(Config.MAX_ACTION, sticksLeft) + \")?\";

userStickNum = promptUserForNumber(input, statement, Config.MIN_ACTION, Math.min(Config.MAX_ACTION, sticksLeft));

sticksLeft = sticksLeft - userStickNum;

if (sticksLeft == 0)

{

System.out.println(player2Name.trim() + \" wins. \" + player1Name.trim() + \" loses.\");

userTurnOver = true;

break;

}

if (sticksLeft == 1)

{

System.out.print(\"There is \" + sticksLeft + \" stick on the board.\");

userTurnOver = true;

//break;

}

else

{

System.out.print(\"There are \" + sticksLeft + \" sticks on the board.\");

userTurnOver = true;

//break;

}

} while(!userTurnOver);

}

}

//TODO

}

/**

* Make a choice about the number of sticks to pick up when given the number

* of sticks remaining.

*

* Algorithm: If there are less than Config.MAX_ACTION sticks remaining,

* then pick up the minimum number of sticks (Config.MIN_ACTION).

* If Config.MAX_ACTION sticks remain, randomly choose a number between

* Config.MIN_ACTION and Config.MAX_ACTION. Use Config.RNG.nextInt(?)

* method to generate an appropriate random number.

*

* @param sticksRemaining

* The number of sticks remaining in the game.

* @return The number of sticks to pick up, or 0 if sticksRemaining is <= 0.

*/

static int basicChooseAction(int sticksRemaining) {

if(sticksRemaining < Config.MAX_ACTION){

if(sticksRemaining <= 0){

sticksRemaining = 0;

}

else{

sticksRemaining = Config.MIN_ACTION;

}

}

else if ( sticksRemaining >= Config.MAX_ACTION){

sticksRemaining = Config.RNG.nextInt(Config.MAX_ACTION) + Config.MIN_ACTION ;

}

return sticksRemaining;

}

/**

* This method has a person play against a computer.

* Call the promptUserForNumber method to obtain user input.

* Call the aiChooseAction method with the actionRanking row

* for the number of sticks remaining.

*

* If the strategyTable is null, then this method calls the

* basicChooseAction method to make the decision about how

* many sticks to pick up. If the strategyTable parameter

* is not null, this method makes the decision about how many sticks to

* pick up by calling the aiChooseAction method.

*

* @param input

* An instance of Scanner to read user answers.

* @param startSticks

* The number of sticks to start the game with.

* @param playerName

* The name of one player.

* @param strategyTable

* An array of action rankings. One action ranking for each stick

* that the game begins with.

*

*/

static void playAgainstComputer(Scanner input, int startSticks,

String playerName, int[][] strategyTable) {

//TODO

}

/**

* This method chooses the number of sticks to pick up based on the

* sticksRemaining and actionRanking parameters.

*

* Algorithm: If there are less than Config.MAX_ACTION sticks remaining

* then the chooser must pick the minimum number of sticks (Config.MIN_ACTION).

* For Config.MAX_ACTION or more sticks remaining then pick based on the

* actionRanking parameter.

*

* The actionRanking array has one element for each possible action. The 0

* index corresponds to Config.MIN_ACTION and the highest index corresponds

* to Config.MAX_ACTION. For example, if Config.MIN_ACTION is 1 and

* Config.MAX_ACTION is 3, an action can be to pick up 1, 2 or 3 sticks.

* actionRanking[0] corresponds to 1, actionRanking[1] corresponds to 2, etc.

* The higher the element for an action in comparison to other elements,

* the more likely the action should be chosen.

*

* First calculate the total number of possibilities by summing all the

* element values. Then choose a particular action based on the relative

* frequency of the various rankings.

* For example, if Config.MIN_ACTION is 1 and Config.MAX_ACTION is 3:

* If the action rankings are {9,90,1}, the total is 100. Since

* actionRanking[0] is 9, then an action of picking up 1 should be chosen

* about 9/100 times. 2 should be chosen about 90/100 times and 1 should

* be chosen about 1/100 times. Use Config.RNG.nextInt(?) method to

* generate appropriate random numbers.

*

* @param sticksRemaining

* The number of sticks remaining to be picked up.

* @param actionRanking

* The counts of each action to take. The 0 index corresponds to

* Config.MIN_ACTION and the highest index corresponds to

* Config.MAX_ACTION.

* @return The number of sticks to pick up. 0 is returned for the following

* conditions: actionRanking is null, actionRanking has a length of

* 0, or sticksRemaining is <= 0.

*

*/

static int aiChooseAction(int sticksRemaining, int[] actionRanking) {

return -1; //TODO change to appropriate value

}

/**

* This method initializes each element of the array to 1. If actionRanking

* is null then method simply returns.

*

* @param actionRanking

* The counts of each action to take. Use the length of the

* actionRanking array rather than rely on constants for the

* function of this method.

*/

static void initializeActionRanking(int []actionRanking) {

//TODO

}

/**

* This method returns a string with the number of sticks left and the

* ranking for each action as follows.

*

* An example: 10 3,4,11

*

* The string begins with a number (number of sticks left), then is followed

* by 1 tab character, then a comma separated list of rankings, one for each

* action choice in the array. The string is terminated with a newline (\ )

* character.

*

* @param sticksLeft

* The number of sticks left.

* @param actionRanking

* The counts of each action to take. Use the length of the

* actionRanking array rather than rely on constants for the

* function of this method.

* @return A string formatted as described.

*/

static String actionRankingToString(int sticksLeft, int[]actionRanking) {

return \"\"; //TODO change to return a String with the specified format.

}

/**

* This method updates the actionRanking based on the action. Since the game

* was lost, the actionRanking for the action is decremented by 1, but not

* allowing the value to go below 1.

*

* @param actionRanking

* The counts of each action to take. The 0 index corresponds to

* Config.MIN_ACTION and the highest index corresponds to

* Config.MAX_ACTION.

* @param action

* A specific action between and including Config.MIN_ACTION and

* Config.MAX_ACTION.

*/

static void updateActionRankingOnLoss(int []actionRanking, int action) {

//TODO

}

/**

* This method updates the actionRanking based on the action. Since the game

* was won, the actionRanking for the action is incremented by 1.

*

* @param actionRanking

* The counts of each action to take. The 0 index corresponds to

* Config.MIN_ACTION and the highest index corresponds to

* Config.MAX_ACTION.

* @param action

* A specific action between and including Config.MIN_ACTION and

* Config.MAX_ACTION.

*/

static void updateActionRankingOnWin(int []actionRanking, int action) {

//TODO

}

/**

* Allocates and initializes a 2 dimensional array. The number of rows

* corresponds to the number of startSticks. Each row is an actionRanking

* with an element for each possible action. The possible actions range from

* Config.MIN_ACTION to Config.MAX_ACTION. Each actionRanking is initialized

* with the initializeActionRanking method.

*

* @param startSticks

* The number of sticks the game is starting with.

* @return The two dimensional strategyTable, properly initialized.

*/

static int[][] createAndInitializeStrategyTable(int startSticks) {

return null; //TODO change to return the array

}

/**

* This formats the whole strategyTable as a string utilizing the

* actionRankingToString method. For example:

*

* Strategy Table

* Sticks Rankings

* 10 3,4,11

* 9 6,2,5

* 8 7,3,1 etc.

*

* The title \"Strategy Table\" should be proceeded by a \ .

*

* @param strategyTable

* An array of actionRankings.

* @return A string containing the properly formatted strategy table.

*/

static String strategyTableToString(int[][] strategyTable) {

return \"\"; //TODO change to return the formatted String

}

/**

* This updates the strategy table since a game was won.

*

* The strategyTable has the set of actionRankings for each number of sticks

* left. The actionHistory array records the number of sticks the user took

* when a given number of sticks remained on the table. Remember that

* indexing starts at 0. For example, if actionHistory at index 6 is 2,

* then the user took 2 sticks when there were 7 sticks remaining on the

* table.

* For each action noted in the history, this calls the

* updateActionRankingOnWin method passing the corresponding action

* and actionRanking. After calling this method, the actionHistory is

* cleared (all values set to 0).

*

* @param strategyTable

* An array of actionRankings.

*

* @param actionHistory

* An array where the index indicates the sticks left and the

* element is the action that was made.

*/

static void updateStrategyTableOnWin(int[][] strategyTable, int[] actionHistory) {

//TODO

}

/**

* This updates the strategy table for a loss.

*

* The strategyTable has the set of actionRankings for each number of sticks

* left. The actionHistory array records the number of sticks the user took

* when a given number of sticks remained on the table. Remember that

* indexing starts at 0. For example, if actionHistory at index 6 is 2,

* then the user took 2 sticks when there were 7 sticks remaining on the

* table.

* For each action noted in the history, this calls the

* updateActionRankingOnLoss method passing the corresponding action

* and actionRanking. After calling this method, the actionHistory is

* cleared (all values set to 0).

*

* @param strategyTable

* An array of actionRankings.

* @param actionHistory

* An array where the index indicates the sticks left and the

* element is the action that was made.

*/

static void updateStrategyTableOnLoss(int[][] strategyTable, int[] actionHistory) {

//TODO

}

/**

* This method simulates a game between two players using their

* corresponding strategyTables. Use the aiChooseAction method

* to choose an action for each player. Record each player\'s

* actions in their corresponding history array.

* This method doesn\'t print out any of the actions being taken.

* Player 1 should make the first move in the game.

*

* @param startSticks

* The number of sticks to start the game with.

* @param player1StrategyTable

* An array of actionRankings.

* @param player1ActionHistory

* An array for recording the actions that occur.

* @param player2StrategyTable

* An array of actionRankings.

* @param player2ActionHistory

* An array for recording the actions that occur.

* @return 1 or 2 indicating which player won the game.

*/

static int playAiVsAi(int startSticks, int[][] player1StrategyTable,

int[] player1ActionHistory, int[][] player2StrategyTable,

int[] player2ActionHistory) {

return -1; //TODO change to return the winning player.

}

/**

* This method has the computer play against itself many times. Each time

* it plays it records the history of its actions and uses those actions

* to improve its strategy.

*

* Algorithm:

* 1) Create a strategy table for each of 2 players with

* createAndInitializeStrategyTable.

* 2) Create an action history for each player. An action history is a

* single dimension array of int. Each index in action history

* corresponds to the number of sticks remaining where the 0 index is

* 1 stick remaining.

* 3) For each game,

* 4) Call playAiVsAi with the return value indicating the winner.

* 5) Call updateStrategyTableOnWin for the winner and

* 6) Call updateStrategyTableOnLoss for the loser.

* 7) After the games are played then the strategyTable for whichever

* strategy won the most games is returned. When both players win the

* same number of games, return the first player\'s strategy table.

*

* @param startSticks

* The number of sticks to start with.

* @param numberOfGamesToPlay

* The number of games to play and learn from.

* @return A strategyTable that can be used to make action choices when

* playing a person. Returns null if startSticks is less than

* Config.MIN_STICKS or greater than Config.MAX_STICKS. Also returns

* null if numberOfGamesToPlay is less than 1.

*/

static int[][] trainAi(int startSticks, int numberOfGamesToPlay) {

return null; //TODO return the strategy table of the winning player

}

}

Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th
Construct a java method. * This method chooses the number of sticks to pick up based on the * sticksRemaining and actionRanking parameters. * * Algorithm: If th

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site