Подсчет того, сколько раз появляется число, с помощью генератора случайных чисел. Ява

#java #for-loop #random

Вопрос:

В этом коде, который я пишу здесь, пользователь вводит, хотят ли они выбрать орел или решку в игре coinflip. Я хотел бы вести учет того, сколько раз появляется орел или решка, и выводить их каждый раз, когда они меняются. После нескольких часов попыток и поисков я не могу понять это идеально, поэтому, если кто-нибудь может сообщить мне, что я мог бы использовать, дайте мне знать.

 import java.util.Random;
import java.util.Scanner;

public class CoinToss {


    private enum Coin {
        Head, Tail
    }

    public static void main(String[] args) {
        CoinToss game = new CoinToss();
        game.startGame();


    }


    private void startGame() {
        Scanner scanner = new Scanner(System.in);
        Coin guess;

        while (true) {
            System.out.print("Enter your guess whether the coin will be heads or tails. Type 1 for heads, 2 for tails, or 3 to quit: ");
            String choice = scanner.nextLine();

            if (choice.equalsIgnoreCase("3")) {
                break;
            } else if (choice.equalsIgnoreCase("1")) {
                guess = Coin.Head;
            } else if (choice.equalsIgnoreCase("2")) {
                guess = Coin.Tail;
            } else {
                System.out.println("Please select either heads tails or quit.");
                continue;
            }

            Coin toss = tosscoin();

            if (guess == toss) {
                System.out.println("You guessed correctly!");
            } else {
                System.out.println("You guessed incorrectly");
            }
        }
        scanner.close();
    }


    private Coin tosscoin() {
        
        Random r = new Random();
        int sideup = r.nextInt(2);
        if (sideup == 1) {
            
            return Coin.Head;
        } else {
            return Coin.Tail;
        }


    }

}
 

Комментарии:

1. Как насчет того, что это не работает?

2. Это работает, извините, если я не прояснил свой вопрос. Я пытаюсь вести текущий подсчет того, сколько раз появляется каждая сторона, когда пользователь продолжает выбирать.

3. Мне жаль, но то, что вы здесь делаете, похоже, в основном раскрывает, как «неслучайные» случайные числа находятся на компьютерах из действительно случайных результатов. Математико-статистическое «биномиальное распределение» (оно же кривая в форме колокола) является истинным случайным (некомпьютерным рандомизированным) ответом на этот вопрос

Ответ №1:

Например, вы можете добавить два поля в свой класс CoinToss. Например, int орел и int решка. Инициализируйте их с 0 в методе startGame (). Затем в методе tosscoin() :

  if (sideup == 1) {
    heads  ;
    return Coin.Head;
} else {
    tails  ;
    return Coin.Tail;
}
 

Вы можете получить доступ к этим полям в методе startGame() и делать с ними все, что захотите.

Вы также можете определить эти две переменные непосредственно в методе startGame() и увеличить их в зависимости от типа монеты, которую вы получаете от метода tosscoin ().

Комментарии:

1. Спасибо! это вывело меня на правильный путь и дало мне хорошее представление о том, что мне нужно было сделать

Ответ №2:

Ниже код должен работать. каждый раз, когда он бросает, он сохраняет текущее значение в переменной и сравнивает его в следующий раз со значением бросания.

 
import java.util.Random;
import java.util.Scanner;

public class CoinToss {

    private static int headCounter;
    private static int tailCounter;
    private static int previousToss;

    private enum Coin {
        Head, Tail
    }

    public static void main(String[] args) {
        CoinToss game = new CoinToss();
        game.startGame();


    }


    private void startGame() {
        headCounter = 0;
        tailCounter = 0;
        previousToss = 0;
        Scanner scanner = new Scanner(System.in);
        Coin guess;

        while (true) {
            System.out.print("Enter your guess whether the coin will be heads or tails. Type 1 for heads, 2 for tails, or 3 to quit: ");
            String choice = scanner.nextLine();

            if (choice.equalsIgnoreCase("3")) {
                break;
            } else if (choice.equalsIgnoreCase("1")) {
                guess = Coin.Head;
            } else if (choice.equalsIgnoreCase("2")) {
                guess = Coin.Tail;
            } else {
                System.out.println("Please select either heads tails or quit.");
                continue;
            }

            Coin toss = tosscoin();

            if (guess == toss) {
                System.out.println("You guessed correctly!");
            } else {
                System.out.println("You guessed incorrectly");
            }
        }
        scanner.close();
    }


    private Coin tosscoin() {

        Random r = new Random();
        int sideup = r.nextInt(2);
        Coin currentGuess;

        if (sideup == 1) {
            headCounter  ;
            currentGuess = Coin.Head;
        } else {
            tailCounter  ;
            currentGuess = Coin.Tail;
        }
        checkIfFlipped(sideup);
        return currentGuess;

    }

    static void checkIfFlipped(int currentToss) {
        
        if (currentToss != previousToss) {
            
            if (currentToss == 0) {
                System.out.println("Coin fliped from head to tail");
            } else {
                System.out.println("Coin fliped from tail  to head");
            }
        }

        previousToss = currentToss;
    }
}
 

Комментарии:

1. Большое спасибо, я был на правильном пути, но не совсем там, это было идеальное руководство.