Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Boolean method that returns an int value;

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).

like image 506
Chris Frank Avatar asked Dec 26 '22 14:12

Chris Frank


2 Answers

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.

like image 179
durron597 Avatar answered Dec 29 '22 04:12

durron597


int wins = 0;
for(int i = 0; i <= 10; i++){
    if(craps(rand)) {
        wins++;
    }
}

// Print a friendly message including `wins`
like image 37
RobEarl Avatar answered Dec 29 '22 04:12

RobEarl