如何为用户输入(单词)分配要在代码中使用的整数值

How can I assign user input (words) an integer value to be used in the code

提问人:Dodo 提问时间:5/14/2019 最后编辑:Stephan HogenboomDodo 更新时间:5/14/2019 访问量:789

问:

我正在尝试创建一个“石头剪刀布蜥蜴斯波克”游戏,并希望用户能够输入分配给变量的整数,并且还能够输入单词或。你能帮我包含一部分代码,我可以将字符串输入分配给整数吗?我也不想改变代码的主框架。我也知道网站说不要粘贴整个文件,但我想不出另一种方法来显示我的问题。请注意,我一直在使用一个名为SoloLearn的网站。任何帮助将不胜感激。(Rock=0, Paper=1, Scissors=2, Lizard=3 and Spock=4)"Rock", "Paper", "Scissors", "Lizard""Spock"

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");
        }
    }
  }
}
解析 随机 java.util.scanner

评论

0赞 Stultuske 5/14/2019
int playerChoice = 输入.nextInt();-> 这读一个整数来读一个单词:String word = input.next();

答:

0赞 Paul Lemarchand 5/14/2019 #1

您可以将允许的输入放在 中,作为文本和关联的数字:mapkeyvalue

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

然后,在您的 main 函数中,检查 是否包含与用户输入相对应的 a,如果是,则获取相应的 .如果没有,请检查用户是否输入了数字。当生成的数字不在 的值中时,请继续循环。mapkeyvaluemap

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赞 Nitika Bansal 5/14/2019 #2

假设:输入单词或整数作为输入。

此解决方案的步骤:

  1. 始终输入字符串输入: String choice = input.next();
  2. 检查选择是否仅包含数字,如果是,请将其转换为整数,否则不执行任何操作。
  3. 如果输入的输入是单词,它将首先进入 switch,然后设置 playerChoice 并正常运行。
  4. 如果输入的输入是数字,它将首先将转换后的整数分配给 playerChoice,然后它将转到 switch,但由于不存在默认值,它将正常运行。
        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;

        }
1赞 Makusium 5/14/2019 #3

如果希望用户可以为 1 个条件输入 2 个值,则可以将 playerChoice 的值转换为临时字符串的 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赞 Dodo 5/15/2019
谢谢你,但是我应该把它放在代码中的位置,我应该删除什么?
0赞 Makusium 5/16/2019
使用而不是你的开关盒阻止我的和删除int playersChoice = 0;它可能会给你一个错误。因为你之前已经创建过了。在 Java 中,不能两次创建同名的变量。但是,您可以创建具有相同名称参数不同的方法