mardi 3 juillet 2018

Generating dice with variable faces using ThreadLocalRandom [duplicate]

This question already has an answer here:

I'm trying to do an object in Java that returns a random number with an upper bound set in objects in the main environment. I know there's loads of posts asking about dice and random numbers but I haven't found the answer anywhere or got Random or Math to load properly.

I'm trying to make a dice where the number of faces can be defined and a random number within that range called with CallDice.

Since I can't get Random or Math to work I'm using ThreadLocalRandom in the function. I set the lower bound to 1 (minimum on the dice) and the upper bound to diceFace + 2. Why + 2?? đŸ€” Setting both the lower and upper bounds to 1 throws an error (the upper bound must be strictly superior).

So I inserted an if statement that runs CallDice again if the random value that is returned is superior to the number of faces the dice has assigned (so diceResult > diceFace).

This looks really weird because it's one of the only ways I can find which doesn't throw an error. My problem however is that it doesn't return anything in the terminal and I can't get System.out.println() to work on any outputs.

Is my thinking going the right direction here? Does anyone have any suggestions which don't involve Random or Math?

import java.util.concurrent.ThreadLocalRandom;
public class Dice8 {

// create necessary objects
    public Dice8(int Faces) {
    diceFace = Faces;
}
    private int diceFace;
    private int diceResult;


// generate random number with diceDim as upper bound
    public int CallDice () {
        diceResult = ThreadLocalRandom.current().nextInt(1, diceFace + 2);
        if (diceResult > diceFace) {
            CallDice ();
        } else {

        }
        return diceResult;
    }

The only other way I found is to subtract any int from the result which is very undesirable:

public int CallDice () {
        diceResult = ThreadLocalRandom.current().nextInt(1, diceFace + 2);
        if (diceResult > diceFace) {
            diceResult = diceResult - 1;
        } else {

        }
        return diceResult;
    }




Aucun commentaire:

Enregistrer un commentaire