Java >> Tutoriel Java >  >> Java

Programme Java de Monty Hall

Programme Java de Monty Hall | Manty Hall Problem est un jeu télévisé où le public a le choix entre trois portes . Derrière les deux portes, des chèvres sont là, et derrière une autre porte, une voiture est là. Avant de commencer le spectacle, ces chèvres et la voiture sont placées au hasard derrière les portes.

La porte qui a une voiture est la porte du prix et vous êtes censé choisir la porte ayant une voiture. Seulement dans ce cas, vous gagnerez la partie. Le jeu du paradoxe de Monty Hall est un problème d'enseignement très célèbre en statistique.

Règles du jeu Monty Hall Paradox

1) Vous êtes invité à choisir une porte. Avant que le temps ne commence, la porte reste fermée.

2) Monty Hall, l'animateur du jeu télévisé sait ce qu'il y a derrière la porte. Il doit maintenant ouvrir l'une des portes restantes. Lorsque la porte s'ouvre, il doit y avoir une chèvre derrière.

3) Si derrière les deux portes restantes, une chèvre est là, l'hôte choisit une porte au hasard.

4) Après avoir ouvert une porte avec une chèvre, il vous donne encore une fois la deuxième chance de resélectionner la porte. Vous pouvez décider de rester à la même porte ou de passer à la dernière porte restante.

Par exemple, si vous avez choisi la porte 1, l'hôte (Monty Hall) doit ouvrir la porte 2 ou la porte 3 et cette porte doit avoir une chèvre. L'hôte de l'image a ouvert la porte-2. Vous devez maintenant décider si vous souhaitez rester avec la porte 1 de votre choix ou passer à la porte 3. Si la porte que vous avez choisie a une voiture, vous gagnez la partie, sinon vous perdez la partie.

Programme Java de Monty Hall

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

public class MontyHall {

   public static void main(String[] args) {
      Scanner scan = new Scanner(System.in);
      Random generator = new Random();
      int userDoor, openDoor, otherDoor;

      // generate random value 1 to 3
      int prizeDoor = generator.nextInt(3) + 1;
      int goatDoor1 = prizeDoor;
      while (goatDoor1 == prizeDoor) {
         goatDoor1 = generator.nextInt(3) + 1;
      }
      int goatDoor2 = goatDoor1;
      while (goatDoor2 == goatDoor1 || goatDoor2 == prizeDoor) {
         goatDoor2 = generator.nextInt(3) + 1;
      }

      // begin Game
      System.out.println("Welcome to the Monty Hall game show!");
      System.out.print("Select the door (1, 2, or 3): ");
      userDoor = scan.nextInt();

      // validation
      if (userDoor > 3 || userDoor <= 0) {
         System.out.print("Please select door 1, 2, or 3");
         userDoor = scan.nextInt();
      } else {
         if(userDoor == goatDoor1) {
            openDoor = goatDoor2;
            otherDoor = prizeDoor;
         } else if(userDoor == goatDoor2) {
            openDoor = goatDoor1;
            otherDoor = prizeDoor;
         } else {
            openDoor = goatDoor1;
            otherDoor = goatDoor2;
         }

         System.out.println("\nIn a moment, I will show you " 
                 + " where the prize is located, but first I will"
               + " show you what is behind one of the other doors");
         System.out.println("\nBehind door number " + openDoor 
                        + " are goats!");
         System.out.println("You selected door number " + userDoor);
         System.out.print("\nWould you like to switch your"+
                         " door (y/n)? ");

         // take user input Yes or No
         char userReply = scan.next().charAt(0);
         while (userReply != 'y' && userReply != 'n') {
            System.out.print("Please enter either y/n");
            userReply = scan.next().charAt(0);
         }
         if (userReply == 'y') {
            userDoor = otherDoor;
            System.out.println("Your choice switched to door " 
                               + userDoor);
         }

         System.out.println("The prize is behind door number: " 
                           + prizeDoor);

         // check if user won or lost
         if (userDoor == prizeDoor) {
            System.out.println("Congratulations! You won the prize!");
         } else {
            System.out.println("Sorry. You lost the game.");
         }
         scan.close();
      }
   }
}

Sortie :-

Bienvenue au jeu télévisé de Monty Hall !
Sélectionnez la porte (1, 2 ou 3) :2

Dans un instant, je vous montrerai où se trouve le prix, mais d'abord je vous montrera ce qu'il y a derrière l'une des autres portes

Derrière la porte numéro 1 se trouvent des chèvres !
Vous avez sélectionné la porte numéro 2

Voulez-vous changer de porte (o/n) ? n
Le prix se trouve derrière le numéro de porte :2
Félicitations ! Vous avez gagné le prix !

Bienvenue au jeu télévisé de Monty Hall !
Sélectionnez la porte (1, 2 ou 3) :3

Dans un instant, je vous montrerai où se trouve le prix, mais d'abord je vous montrera ce qu'il y a derrière l'une des autres portes

Derrière la porte numéro 1 se trouvent des chèvres !
Vous avez sélectionné la porte numéro 3

Voulez-vous changer de porte (o/n) ? y
Votre choix est passé à la porte 2
Le lot se trouve derrière la porte numéro :3
Désolé. Vous avez perdu la partie.

La tâche consiste donc à exécuter la simulation aléatoire du jeu Monty Hall. Ce jeu consiste à montrer comment la stratégie fonctionne pour gagner. Observez la sortie, les chances de gagner lorsque vous choisissez de changer de porte sont beaucoup plus élevées que lorsque vous ne choisissez pas de changer. Voyons le programme Java de Monty Hall.

Programme qui simule le jeu monty hall Java

import java.util.Random;

public class MontyHall {
   public static void main(String[] args) {

      Random random = new Random();
      int trial = 1000000;

      System.out.println("The player never changes the door.");
      int win = 0;
      for (int i = 1; i <= trial; i++) {
         int prizeDoor = random.nextInt(3);
         int contestantDoor = random.nextInt(3);

         if (contestantDoor == prizeDoor) {
            win++;
         }
      }

      System.out.println("Total Wins out of " + trial + ": " + win);
      System.out.println("Percent win: " + (double) win / trial);
      System.out.println();

      System.out.println("The player always changes the door.");
      win = 0;
      for (int i = 1; i <= trial; i++) {
         int prizeDoor = random.nextInt(3);
         int contestantDoor = random.nextInt(3);

         int wrongDoor = prizeDoor;
         while (wrongDoor == prizeDoor || 
                wrongDoor == contestantDoor) {
            wrongDoor = random.nextInt(3);
         }

         int alternateDoor = 3 - (contestantDoor + wrongDoor);

         if (alternateDoor == prizeDoor) {
            win++;
         }
      }

      System.out.println("Total Wins out of " + trial + ": " + win);
      System.out.println("Percent win: " + (double) win / trial);
   }
}

Sortie :-

Le joueur ne change jamais de porte.
Total de gains sur 1 000 000 :333 488
Pourcentage de gain :0,333488

Le joueur change toujours de porte.
Total de gains sur 1 000 000 :667534
Pourcentage de gain :0,667534

Le joueur ne change jamais de porte.
Total de gains sur 1 000 000 :333 105
Pourcentage de gain :0,333105

Le joueur change toujours de porte.
Total de gains sur 1 000 000 :666258
Pourcentage de gain :0,666258

Le joueur ne change jamais de porte.
Total de gains sur 1 000 000 :333 506
Pourcentage de gain :0,333506

Le joueur change toujours de porte.
Total de gains sur 1 000 000 :666795
Pourcentage de gain :0,666795

Dans le programme Java Monty Hall ci-dessus, nous avons pris la classe Java Random pour générer des nombres aléatoires. Et nous avons pris les cas où le joueur ne change jamais de porte après son premier choix et le cas où le joueur change toujours de porte.

Sur 1000000 jeux, il montre le pourcentage de chances de gagner. Le pourcentage de gain lorsque le joueur change de porte est toujours supérieur au cas où le joueur ne change pas de porte. Voir aussi :- Programme Anagramme en Java utilisant la liste


Balise Java