java - 使用 boolean 值从用户字符串 java 输入验证

标签 java validation

我正在创建一个石头剪刀布游戏,唯一让我困惑的部分是输入验证。我尝试过 do/while 循环、try/catch 但似乎无法让它正常运行。以下是我目前拥有的 getUserChoice 方法。任何帮助将不胜感激。谢谢!

public String getUserChoice(){
    String user = " ";
    boolean error = false;

    Scanner in = new Scanner(System.in);
    System.out.println("Please enter rock, paper, or scissors: ");
    user = in.nextLine(); //reads user input

    do {
        if (user.equalsIgnoreCase("rock")) {
            user = "rock";
            error = false;
        }
        else if (user.equalsIgnoreCase("paper")) {
            user = "paper";
            error = false;
        }
        else if (user.equalsIgnoreCase("scissors")) {
            user = "scissors";
            error = false;
        }
    }
    while(error); {
        System.out.println("Please enter valid input: ");
    }
    return user;
}

最佳答案

您可以将代码稍微更改为:

public String getUserChoice(){
String user = " ";
boolean error = true;

Scanner in = new Scanner(System.in);
System.out.println("Please enter rock, paper, or scissors: ");
user = in.nextLine(); //reads user input

do {
    if (user.equalsIgnoreCase("rock")) {
        user = "rock";
        error = false;
    }
    else if (user.equalsIgnoreCase("paper")) {
        user = "paper";
        error = false;
    }
    else if (user.equalsIgnoreCase("scissors")) {
        user = "scissors";
        error = false;
    } else {
        System.out.println("Please enter valid input: ");
        user = in.nextLine(); 
    }
}
while(error);

return user;
}

boolean error = true; 使 while block 无限迭代,否则,它将在第一次迭代时跳出。

else block 是在输入条件不佳时执行的内容。 while 之外的 system.out 在循环结束后执行

实现此目的的更有效或可读的方法是将 do-while block 替换为:

while (true){
    if (user.equalsIgnoreCase("rock") || user.equalsIgnoreCase("paper")  || user.equalsIgnoreCase("scissors")){
        return user;
    } else {
        System.out.println("Please enter valid input: ");
        user = in.nextLine(); 
    }       
}

关于java - 使用 boolean 值从用户字符串 java 输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60870790/

相关文章:

java - Guava 中没有 SortedMultiMap 吗?

货币格式的Javascript正则表达式

java - MVVM 数据绑定(bind)验证

java - jQuery Validation 插件希望消息在文本框下对齐

java - 从 Java 应用程序发送邮件

java - 在多播上发布时,ZeroMQ 3.2.3 之上的 JZMQ 2.x.x 是否存在内存泄漏?

java - JPQL 中带有 IN 运算符的枚举列表

java - 使用 JAXB 编码(marshal)时出现内存不足错误

javascript - 正则表达式测试返回 false

javascript - Jquery Ajax 验证复选框