2015-09-24 85 views
0

试图创建一个简单的程序,该程序有三个文本输入选项。如果用户键入三者中的一个,则程序继续。如果用户键入其他内容,则程序将循环返回并再次请求输入,直到给出适当的响应。 使用下拉列表或其他方法将不起作用,因为这是用于分配的。Java do-while多字符串验证

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来解决三个正确答案中的每一个。

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

回答

5
while (verifyName = true) 
        ↑ 

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

while (true) 

您应将其更改为:

while (verifyName) 

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

+0

太棒了!这工作。我还必须在while语句中添加布尔变更代码以摆脱循环。谢谢一堆! –

+0

@JasonGoss正确,这是另一个错误。我很高兴它适合你! – Maroun

2

注意的两点:1。 )这样做

while(verify = true) 

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

while(verifyName) 

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

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

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; 
    } 
}