This exercise is reserved for pair programming in the live lab sessions.
Please skip it when doing the exercises individually.
On p. 66 of the Sedgewick & Wayne textbook, the following block of code is given:
public class Gambler
{
public static void main(String[] args)
{
int stake = Integer.parseInt(args[0]);
int goal = Integer.parseInt(args[1]);
int num_trials = Integer.parseInt(args[2]);
int bets = 0;
int wins = 0;
for (int t = 0; t < num_trials; t++)
{
int cash = stake;
while (cash > 0 && cash < goal)
{
bets++;
if (Math.random() < 0.5 ) cash++;
else cash--;
}
if (cash == goal) wins++;
}
System.out.println(100 * wins/num_trials + "% wins");
System.out.println("Avg # bets: " + bets/num_trials);
}
}
Note
In S&W, the authors use a variable T. For greater clarity, we have renamed it as num_trials.
Familiarise yourself with the Gambler’s Ruin code and run it with some different parameters.
Adjust the program so that the probability of a win, prob_of_win, can also be given as a command-line parameter. Your program should now be called as follows:
:java Gambler <stake:int> <goal:int> <num_trials:int> <prob_of_win:double>
where <variable-name:variable-type> tells you the types of expected command-line parameters. For example,
:java Gambler 2 20 5 0.75
should make the program run with the assignments stake = 2, goal = 20, num_trials = 5 and prob_of_win = 0.75.
An automated test has been created for this exercise: GamblerTest.java.