【问题标题】:Java do-while with multiple string validationJava do-while 多字符串验证
【发布时间】:2015-09-24 08:49:33
【问题描述】:

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

 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 上花了最后一个小时,但我发现的一切都是使用整数。当它只是一个数字和一个操作数时,验证用户输入似乎很容易。但是如何使用三个可能的字符串呢?!

【问题讨论】:

    标签: java string validation


    【解决方案1】:
    while (verifyName = true)
                      ↑
    

    您是在分配,而不是比较。赋值表达式返回赋值,所以你的循环相当于:

    while (true)
    

    你应该把它改成:

    while (verifyName)
    

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

    【讨论】:

    • 太棒了!这行得通。我还必须在 while 语句中添加布尔更改代码才能退出循环。非常感谢!
    • @JasonGoss 正确,这是另一个错误。我很高兴它对你有用!
    【解决方案2】:

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

    while(verify = true)
    

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

    while(verifyName)
    

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

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

    【讨论】:

      【解决方案3】:

      您永远不会跳出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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-05-24
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多