Java do-while有多个字符串验证

时间:2015-09-24 08:49:34

标签: java string validation

尝试创建一个包含三个文本输入选项的简单程序。如果用户键入三者中的一个,则程序继续。如果用户键入其他内容,程序将循环返回并再次请求输入,直到给出正确的响应。 使用下拉列表或其他方法将不起作用,因为这是一项任务。

 System.out.print("Enter one of the following: cheese, water, or burger: ");
        userMedium = user_input.nextLine( );  // store user input as a string
        mediumConvert = userMedium.toLowerCase();

        boolean verifyName;
        if (mediumConvert.equals("cheese") || mediumConvert.equals("water") || mediumConvert.equals("burger")){
            verifyName = false;
        } else {
            verifyName = true;
        }

        while (verifyName = true){
            System.out.println("Please input a valid medium (cheese, water, or burger): ");
            userMedium = user_input.nextLine( );
            mediumConvert = userMedium.toLowerCase();
        }

这是我到目前为止所设置的,但这只是不断重复循环OVER AND OVER。在本节之后,我想执行switch来处理三个正确答案中的每一个。

我在Google和YouTube上度过了最后一小时,但我发现的一切都是使用整数。当它只是一个数字和一个操作数时,验证用户输入似乎很容易。但是我如何使用三种可能的字符串?!

3 个答案:

答案 0 :(得分:5)

while (verifyName = true)
                  ↑

分配而非比较。赋值的表达式返回赋值,因此您的循环等效于:

while (true)

您应将其更改为:

while (verifyName)

基本上,你应该写while (verifyName == true),但它是多余的,因为它就像问“ verifyName的值是否为真?”。此外,它还可以防止潜在的错误,例如只插入一个=而不是两个..

答案 1 :(得分:2)

注意到两件事: 1.)通过

while(verify = true)

您实际上是将值true分配给verifyName。你需要使用

while(verifyName)

2.。)你在哪里重新分配verifyName的价值? 您应该在while块内验证并重新分配。

此外,你应该考虑更清洁的替代解决方案,但这可以等待另一天。

答案 2 :(得分:1)

您永远不会突破while循环,因为变量verifyName永远不会在循环内更新。这意味着你要么永远不要执行循环,因为用户插入了你想要的输入,否则你最终会得到一个无限循环。

您还需要在循环内部进行输入验证,并且还要小​​心布尔验证。 类似的东西:

while (verifyName) {
    System.out.println("Please input a valid medium (air, water, or steel): ");
    userMedium = user_input.nextLine( );
    mediumConvert = userMedium.toLowerCase();
    if (mediumConvert.equals("cheese") || mediumConvert.equals("water") || mediumConvert.equals("burger")){
        verifyName = false;
    } else {
        verifyName = true;
    }
}