输入验证和拒绝不正确的输入

时间:2014-04-24 23:29:38

标签: java validation if-statement

我正在尝试验证用户输入。我尝试了一些if语句和尝试布尔值。我无法得到任何东西给出输出或者更确切地说我想要的验证

要求用户在“红色”或“蓝色”之间进行选择我希望他们要求输入“红色”或“蓝色”。我知道这可以通过按钮更容易解决,但我正在尝试使用字符串输入。下面的代码举例说明了我的位置。

custColorMsg = "Which color do you want your shirt to be red or blue?";
customerColor = getstringInput(custColorMsg);
String color = null 
if( customerColor.equalsIgnoreCase("yes")) {
color = true}

if( customerColor.equalsIgnoreCase("no")) {
color = true}

else if(!customerColor.equalsIgnoreCase("yes" || "no") {
color = false}  

我知道这最后一部分是错的我只是不确定如何修复它。客户将有三次机会输入有效的响应然后程序将终止,这部分我可以处理。如果我能弄清楚如何接受“是”或“否”并拒绝其他任何事情。

2 个答案:

答案 0 :(得分:1)

就这个程序的设计而言,我建议添加一个for循环,从0到2(这将迭代3次)。在循环内,程序可以确定用户的输入是什么。我还建议查看下面for循环的语法,我使用ifs,否则使用ifs和elses来更有效地评估数据集。

该计划的实施可以是:

for(int i = 0; i < 3; i++)
{
      customerColor = getstringInput(custColorMsg);
      String color = null 
      if( customerColor.equalsIgnoreCase("yes")) {
      color = true;
      break;
    }

      else if( customerColor.equalsIgnoreCase("no")) {
      color = true;
      break;
    }
      else{
      color = false;
    }
      custColorMsg = "Invalid Input, Please Input Again";
}

这将给用户3次输入数据,如果他们输入正确,它将停止询问,但是,如果他们不这样做,它将再次询问,直到他们用完了。

答案 1 :(得分:1)

您的方法存在一些问题。

  1. 您的变量名称的语义略有不同。这使得代码难以阅读。例如,您在此处定义为color但始终用作String的变量Boolean有点令人困惑。我猜你的意思是将它定义为Boolean类型,并打算将它用作循环中的破坏条件 - 将它命名为isValidColor或沿着这些行的某些内容会更有意义。

  2. 以下行不符合您的想法:

    customerColor.equalsIgnoreCase("yes" || "no")

    方法equalsIgnoreCase()接收String而不是Boolean,就像您的代码中的这一行将有一个参数。由于||将解析为Boolean truefalse的{​​{1}}值。此外,那些是该运算符的错误操作数类型,代码将无法编译。

  3. 对于您的控制结构,您可以使用while循环,当您达到最大尝试次数或输入有效回复时,该循环将退出。

  4. 这是您正在尝试完成的工作控制台版本:

    String custColorMsg = "Which color do you want your shirt to be red or blue?";
    String customerColor;
    Boolean validInput = false;
    Scanner in = new Scanner(System.in);
    int tries = 0;
    while (tries < 3 && !validInput)
    {           
        System.out.println(custColorMsg);
        customerColor = in.nextLine();
    
        if( customerColor.equalsIgnoreCase("red")) {
            validInput = true;
        }
        else if( customerColor.equalsIgnoreCase("blue")) {
            validInput = true;
        }
    
        tries++;
    }