ЯВА, Настольная игра.Случайные числа костей не случайные - PullRequest
0 голосов
/ 11 марта 2019

Я новичок в Java и пишу код. Я хочу запрограммировать простую настольную игру. Но если я бросаю кости, я получаю одно и то же число при каждом броске. Что я сделал не так?

У меня есть класс для создания случайного числа от 1 до 6:

public class Dice {
    public int throwDice() {
        Random random = new Random();
        int dice = random.nextInt(6) + 1;
        return dice;
    }
}

И основной класс:

public class BoardGame{

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String r;
        Dice dice = new Dice();
        int roll = dice.throwDice();
        int position = 0;
        int finish = 40;

        while (finish >= position) {
            do {
                System.out.print("Roll the dice (r): ");
                r = input.nextLine();
            } while (!r.toLowerCase().equals("r"));

            if (r.toLowerCase().equals("r")) {
                System.out.println("You have rolled " + roll + ".");
                position += roll;
                System.out.println("You are now on square " + position + ".");
            }

        }
        System.out.println("You won!");
        input.close();
    }

}

Спасибо!

Ответы [ 4 ]

2 голосов
/ 11 марта 2019

Код, который получает случайный результат:

int roll = dice.throwDice();

запускается ровно один раз.Вы вызываете метод throw один раз .Вы сохраняете результат, а не «указатель» на функцию, которая будет вызываться повторно всякий раз, когда roll используется где-то.

Так что вы должны поместить эту строку:

roll = dice.throwDice();
System.out.println("You have rolled " + roll + ".");

прямо вперед тем местом, где вы ожидаете еще один бросок костей!

1 голос
/ 11 марта 2019
public class Dice {
    private Random random;
    public Dice(){
        random = new Random();
    }

    public int throwDice(){
        int dice = random.nextInt(6) + 1;
        return dice;
    }
}

Это будет работать, потому что ваша игральная кость теперь имеет один случайный экземпляр, который генерирует новые случайные целые числа каждый раз, когда throwDice () называется

0 голосов
/ 11 марта 2019

После добавления int roll = dice.throwDice(); в ваш цикл вы можете обнаружить, что каждый раз получаете одну и ту же последовательность ролей.Если вы не хотите этого, вам придется установить случайное начальное число.

См. Этот вопрос: Случайные числа Java с использованием начального числа

0 голосов
/ 11 марта 2019

Измените класс Dice на этот.

public class Dice {
    private Random random;
    public Dice(){
        random = new Random();
    }

    public int throwDice(){
        int dice = random.nextInt(6) + 1;
        return dice;
    }
}

И обновите roll = dice.throwDice(); внутри цикла.Это будет работать, потому что ваша игральная кость теперь имеет один случайный экземпляр, который генерирует новые случайные целые числа каждый раз, когда вызывается throwDice().

...