Как я могу назначить пользовательский ввод (слова) целочисленное значение для использования в коде - PullRequest
2 голосов
/ 14 мая 2019

Я пытаюсь создать игру «Спок ящерицы Rock Paper Scissors» и хочу, чтобы пользователь мог вводить целые числа, присвоенные переменным (Rock=0, Paper=1, Scissors=2, Lizard=3 and Spock=4), а также вводить слова "Rock", "Paper", "Scissors", "Lizard" или "Spock". Не могли бы вы помочь мне включить часть кода, где я могу назначить строковые входы целым числам. Я также не хочу менять основной каркас кода. Я также знаю, что на веб-сайте написано, что не нужно вставлять весь файл, но я не могу придумать другой способ показать мою проблему. Обратите внимание, что я использую веб-сайт под названием SoloLearn . Любая помощь будет принята с благодарностью.

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");
        }
    }
  }
}

Ответы [ 3 ]

0 голосов
/ 14 мая 2019

Предполагается: либо слова, либо целые числа вводятся в качестве входных данных.

Шаги для этого решения:

  1. Всегда вводить строковый ввод: Выбор строки = input.next ();
  2. Проверка, содержит ли выбор только цифры, если да, преобразовать это в Integer, иначе ничего не делать.
  3. , если введенный ввод - слова, он переключится первым,затем установите playerChoice и запустите его правильно.
  4. Если введенный ввод является цифрой, он сначала назначит преобразованное целое число для playerChoice, затем он переключится, но, поскольку по умолчанию не существует, он будет работать правильно.
        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 голосов
/ 14 мая 2019

Если вы хотите, чтобы ваш пользователь мог ввести 2 значения для 1 условия, вы можете преобразовать значение из playerChoice в String для временной строки String, а затем создать для него вариант переключения, как показано ниже:

 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;
    }
0 голосов
/ 14 мая 2019

Вы можете поместить разрешенные входные данные в map, key - текст, а value - связанный номер:

private static final Map<String, Integer> ALLOWED_INPUTS = Collections.unmodifiableMap(Map.of(
    "ROCK", 0,
    "PAPER", 1,
    "SCISSORS", 2,
    "LIZARD", 3,
    "SPOCK", 4
));

Затем в вашей основной функции проверьте, содержит ли map значение key, соответствующее пользовательскому вводу, если это так, получите соответствующий value. Если нет, убедитесь, что пользователь ввел номер. Продолжайте цикл, пока результирующее число в любом случае не находится в значениях map.

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);
...