Método de Monte Carlo con código Java para encontrar la probabilidad de que la caja tome la pelota

Método de Monte Carlo para encontrar la probabilidad de una caja

tema

Tres cajas contienen bolas blancas, bolas blancas, bolas blancas, bolas negras, bolas negras y bolas negras.
Pregunta: Cuando una bola extraída es negra, la probabilidad de que otra bola extraída sea también negra.

Implementación de código Java

public class Main {
    public static void main(String[] args) {
        Random random = new Random();
        //模拟三个盒子 0是白色, 1 是黑色
        Box[] boxes = new Box[]{
                new Box(0, 0),
                new Box(0, 1),
                new Box(1, 1)
                //当拿到一个黑色时,再取出一个的概率是多少?

        };
        //取第一个球,是黑色时的次数
        double countBlackOneCount = 0;
        //另一个个球,仍然是黑色的次数
        double countBlackTwoCount = 0;
        //总共取球次数
        int count = 1000000;
        for(int i =0;i<count;i++) {
            int selectedBox = random.nextInt(3);
            int selectedBall = random.nextInt(2);
            if(boxes[selectedBox].getBall(selectedBall) == 0){

                //取得一个黑球
            }else if(boxes[selectedBox].getBall(selectedBall) == 1){
                countBlackOneCount++;
                int otherBall;
                if(selectedBall == 0){
                    otherBall = 1;
                }else{
                    otherBall = 0;
                }
                if(boxes[selectedBox].getBall(otherBall) == 1){
                    countBlackTwoCount++;
                }
            }
        }
        System.out.println("总取球次数: " + count);
        System.out.println("取出第一个球是黑球的次数: " + countBlackOneCount);
        System.out.println("取出黑球后取另一个球仍然是黑球的次数: " + countBlackTwoCount);
        System.out.println("取出第二个球是黑球的次数/取出第一个球是黑球的次数: " + (countBlackTwoCount / countBlackOneCount) + "%");
    }

    static class Box{
        int ball0;
        int ball1;
        public Box(int ball0, int ball1){
            this.ball0 = ball0;
            this.ball1 = ball1;
        }
        public int getBall(int id){
            if(id == 0){
                return ball0;
            }else if(id == 1){
                return ball1;
            }else{
                throw new RuntimeException("Unsupported ball id: " + id);
            }
        }
    }
}

Salida

Número total de recuperaciones de bola: 1000000 Número de veces que la
primera bola fue sacada como una bola negra: 5000 14.0 Número de veces que
la bola negra fue sacada y otra todavía era una bola negra: 333503.0 Número de veces que la
segunda bola fue sacada como una bola negra / La primera bola fue sacada La cantidad de veces que es una bola negra: 0.666987324354918%

Supongo que te gusta

Origin blog.csdn.net/killingbow/article/details/90510964
Recomendado
Clasificación