2
votes

Comment puis-je attribuer à l'entrée utilisateur (mots) une valeur entière à utiliser dans le code

J'essaye de créer un jeu de "Rock Paper Scissors Lizard Spock", et je veux que l'utilisateur soit en mesure de mettre les entiers affectés aux variables (Rock = 0, Paper = 1, Scissors = 2, Lizard = 3 et Spock = 4) et aussi pouvoir saisir les mots "Rock", "Paper", "Scissors", "Lizard" ou " Spock ". Pourriez-vous m'aider à inclure une partie du code où je peux attribuer les entrées de chaîne à des entiers. Je ne veux pas non plus changer le cadre principal du code. Je sais aussi que le site Web dit de ne pas coller le fichier entier, mais je ne peux pas penser à une autre façon de montrer mon problème. Veuillez noter que j'utilise un site Web appelé SoloLearn . Toute aide serait grandement appréciée.

import java.util.Scanner;

public class RockPaperScissorsLizardSpock {

    final static int ROCK = 0;
    final static int PAPER = 1;
    final static int SCISSORS = 2;
    final static int LIZARD = 3;
    final static int SPOCK = 4;


    public static void main(String[] args) {

        double r = Math.random();
        int computerChoice = (int)(3.0 * r);

        Scanner input = new Scanner(System.in);
        System.out.print("Enter 0 for Rock, 1 for Paper, 2 for Scissors, 3 for Lizard, 4 for Spock: ");
        int playerChoice = input.nextInt();
    System.out.println(computerChoice);

    int playerChoice = 0;

    switch (playerChoice) {

        case "Rock":
            playerChoice = 0;
            break;
        case "Paper":
            playerChoice = 1;
            break;
        case "Scissors":
            playerChoice = 2;
        case "Lizard":
            playerChoice = 3;
        case "Spock":
            playerChoice = 4;

    if (computerChoice == playerChoice) {
            System.out.println("Tie");
        }
        else if (computerChoice == ROCK && playerChoice == SCISSORS) {
            System.out.println("I chose Rock,You chose Scissors, Rock crushes Scissors, You lose.");
        }
        else if (computerChoice == SCISSORS && playerChoice == PAPER) {
            System.out.println("I chose Scissors, You chose Paper, Scissors cut Paper, You lose.");
        }
        else if (computerChoice == PAPER && playerChoice == ROCK) {
            System.out.println("I chose Paper,You chose Rock, Paper covers Rock, You lose.");
        }
         else if (computerChoice == LIZARD && playerChoice == PAPER) {
            System.out.println("I chose Lizard, You chose Paper, Lizard eats Paper, You lose.");
        }
        else if (computerChoice == SPOCK && playerChoice == SCISSORS) {
            System.out.println("I chose Spock, You chose Scissors, Spock smashes Scissors, You lose.");
        }
        else if (computerChoice == ROCK && playerChoice == LIZARD) {
            System.out.println("I chose Rock, You chose Lizard, Rock crushes Lizard, You lose.");
        }
        else if (computerChoice == SCISSORS && playerChoice == LIZARD) {
            System.out.println("I chose Scissors, You chose Lizard, Scissors decapitates Lizard, You lose.");
        }
        else if (computerChoice == SPOCK && playerChoice == PAPER) {
            System.out.println("I chose Spock, You chose Paper, Paper disproves Spock, You lose.");
        }
        else if (computerChoice == SPOCK && playerChoice == ROCK) {
            System.out.println("I chose Spock, You chose Rock, Spock vaporizes Rock, You lose.");
        }
        else if (computerChoice == SCISSORS && playerChoice == ROCK) {
            System.out.println("I chose Scissors, You chose Rock, Rock crushes Scissors, You win.");
        }
        else if (computerChoice == PAPER && playerChoice == SCISSORS) {
            System.out.println("I chose Paper, You chose Scissors, Scissors cut Paper, You win.");
        }
        else if (computerChoice == ROCK && playerChoice == PAPER) {
            System.out.println("I chose Rock, You chose Paper, Paper covers Rock,You win.");
        }
        else if (computerChoice == PAPER && playerChoice == LIZARD) {
            System.out.println("I chose Paper, You chose Lizard, Lizard eats Paper, You win.");
        }
        else if (computerChoice == SCISSORS && playerChoice == SPOCK) {
            System.out.println("I chose Scissors, You chose Spock, Spock smashes Scissors, You win.");
        }
         else if (computerChoice == LIZARD && playerChoice == ROCK) {
            System.out.println("I chose Lizard, You chose Rock, Rock crushes Lizard, You win.");
        }
        else if (computerChoice == LIZARD && playerChoice == SCISSORS) {
            System.out.println("I chose Lizard, You chose Scissors, Scissors decapitates Lizard,  win.");
        }
        else if (computerChoice == PAPER && playerChoice == SPOCK) {
            System.out.println("I chose Paper, You chose Spock, Paper disproves Spock, You win.");
        }
        else if (computerChoice == ROCK && playerChoice == SPOCK) {
            System.out.println("I chose Rock, You chose Spock, Spock vaporizes Rock, You win.");
        }else{
            System.out.println("Error");
        }
    }
  }
}


1 commentaires

int playerChoice = input.nextInt (); -> cela lit un int. pour lire un mot: String word = input.next ();


3 Réponses :


0
votes

Vous pouvez mettre vos entrées autorisées dans une carte , la clé étant le texte et la valeur étant le numéro associé:

Scanner in = new Scanner(System.in);
int playerChoice = -1;
String input;

while(!ALLOWED_INPUTS.containsValue(playerChoice)) {
    input = in.nextLine();
    if (ALLOWED_INPUTS.containsKey(input))
        playerChoice = ALLOWED_INPUTS.get(input);
    else {
        try {
            playerChoice = Integer.parseInt(input);
        } catch(NumberFormatException e) {}
    }
}

System.out.println("You choosed choice number " + playerChoice);


0 commentaires

0
votes

En supposant: soit des mots, soit des nombres entiers sont entrés comme entrées.

Étapes pour cette solution:

  1. Entrée de chaîne toujours saisie: String choice = input.next ();
  2. Vérifier si le choix ne contient que des chiffres, si oui, convertissez-le en entier sinon ne faites rien.
  3. si l'entrée saisie est des mots, il passera d'abord à basculer, puis définira playerChoice et fonctionnera correctement.
  4. si l'entrée saisie est un chiffre, il attribuera d'abord un entier converti à playerChoice, puis il passera au commutateur, mais comme aucune valeur par défaut n'existe, il fonctionnera correctement.
        String choice = input.next();
        if (choice.matches("\\d+"))
            playerChoice = Integer.parseInt(choice);

        switch (choice.toUpperCase()) {
        case "ROCK":
            playerChoice = 0;
            break;
        case "PAPER":
            playerChoice = 1;
            break;
        case "SCISSORS":
            playerChoice = 2;
            break;
        case "LIZARD":
            playerChoice = 3;
            break;
        case "SPOCK":
            playerChoice = 4;
            break;

        }


0 commentaires

1
votes

Si vous voulez que votre utilisateur puisse saisir 2 valeurs pour 1 condition, vous pouvez convertir la valeur de playerChoice en chaîne pour une chaîne temporaire, puis faire un changement de cas comme suit:

 String tempString = Integer.toString(playerChoice);


        switch (tempString) {
        case "0":
        case "Rock":
            playerChoice = 0;
            break;
        case "1":
        case "Paper":
            playerChoice = 1;
            break;
        case "2":
        case "Scissors":
            playerChoice = 2;
            break;
        case "3":
        case "Lizard":
            playerChoice = 3;
            break;
        case "4":
        case "Spock":
            playerChoice = 4;
            break;
    }


2 commentaires

Merci pour cela, mais où dois-je mettre cela dans le code et que dois-je supprimer?


utilisez à la place de votre switch case block mine et et supprimez int playersChoice = 0; cela pourrait vous donner une erreur .... parce que vous l'avez déjà créé avant. En Java, vous ne pouvez pas créer une variable avec le même nom deux fois. Mais vous pouvez créer des méthodes avec le même nom mais paramètres différents .