4

I am teaching myself Java, and I created a program to simulate a game of craps. I have the entire game in a Boolean method. Everything works fine, but I want to count every time the user wins. What is the best way to count these wins, and then print them?

Here is my code:

import java.util.Random;

public class game{

public static void main(String[] args) {
    Random rand = new Random();
    for(int i = 0; i <= 10; i++){
        craps(rand);
    }
}

public static boolean craps(Random randomGen){
    int roll1 = randomGen.nextInt(6) + 1;
    int roll2 = randomGen.nextInt(6) + 1;

    int sum = roll1 + roll2;
    int sumRepeat = sum;
    int count = 0;


    String win = "you win";
    String lose = "you lose";
    String point = "point=";

    if(sum == 7 || sum == 11){
        System.out.printf("[%d,%d] %d %s\n",roll1,roll2,sum,win);
        count++;
        return true;
    }
    else if(sum == 2 || sum == 3 || sum == 12){
        System.out.printf("[%d,%d] %d %s\n",roll1,roll2,sum,lose);
        return false;
    }
    else{
        System.out.printf("[%d,%d] %s %d",roll1,roll2,point,sum);
        int roll3 = randomGen.nextInt(6) + 1;
        int roll4 = randomGen.nextInt(6) + 1;
        int sum2 = roll3 + roll4;
        do{
            roll3 = randomGen.nextInt(6) + 1;
            roll4 = randomGen.nextInt(6) + 1;
            sum2 = roll3 + roll4;
            if(sum2 == sumRepeat){
                System.out.printf("[%d,%d] %d %s\n",roll3,roll4,sum2,win);
                count++;
                return true;
            }else{
                System.out.printf("[%d,%d]",roll3,roll4);
            }
        }
        while(sum2 != 7);{
            System.out.printf("[%d,%d] %d %s\n",roll3,roll4,sum2,lose);
            return false;
        }
    }
}
}

I have tried to return the count variable but I get an error saying I can't return an int value from a Boolean method which I expected. But I also tried to print out the count value with System.out.println(); But I can't find a place in the code to put it since I always get an error stating that the println is unreachable code.

Any help would be appreciated. Thanks!

Here is the output of the program

[1,6] 7 you win

[2,4] point= 6[3,6][3,3] 6 you win

[3,3] point= 6[5,1] 6 you win

[6,1] 7 you win

[6,3] point= 9[5,1][3,5][2,6][6,4][5,6][1,5][6,3] 9 you win

[3,3] point= 6[1,5] 6 you win

[5,1] point= 6[1,5] 6 you win

[2,2] point= 4[6,4][3,3][3,4][3,4] 7 you lose

[4,5] point= 9[6,4][5,1][1,2][6,2][1,5][3,5][6,5][1,5][5,2][5,2] 7 you lose

[2,2] point= 4[5,3][5,6][6,4][3,2][6,5][3,6][4,4][4,2][4,3][4,3] 7 you lose

[6,6] 12 you lose

You won 11 time(s).

2 Answers 2

8

Count them outside the craps function, here's one simple way:

public static void main(String[] args) {
    Random rand = new Random();
    int counter = 0;
    for(int i = 0; i <= 10; i++){
        if(craps(rand)) counter++;
    }

    System.out.println("You won " + counter + " times!");
}

By the way, it's important to note that it's far superior to count outside the craps function than it is to modify it. As you learn java, remember that each method should only do one job. You may want to practice breaking the craps function into smaller pieces to practice this philosophy. The one method to one job philosophy will make larger projects much easier to understand and debug when you are looking back later.

Sign up to request clarification or add additional context in comments.

2 Comments

I implemented your solution, and it almost works like I wanted. The only problem Is it's counting every time a game is played. Instead of counting everytime the user wins a round. I will paste a copy of the output of my program to make everything clearer. Thanks again for the help.
If you copy-pasted exactly, it should work... unless your craps function always returns true. I didn't actually check that function, I just assumed it works.
2
int wins = 0;
for(int i = 0; i <= 10; i++){
    if(craps(rand)) {
        wins++;
    }
}

// Print a friendly message including `wins`

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.