虽然在java中继续在无效输入后重新提示用户的循环

时间:2015-12-04 01:05:46

标签: java loops while-loop contains

我想在输入无效后重新提示用户(空或不存在)。下面的代码帮助我做但是即使给出了有效的输入,它仍然会提示用户输入另一个输入。如果插入有效输入后如何阻止循环再次运行?< / p>

    //get user input
    String year = JOptionPane.showInputDialog("Enter input");

    try{
        while (true) {
            List <WebElement> PageScrubberPagelet = dr.findElements(By.xpath("//li[@class='_3d5d']//a[contains(@data-key,'')]"));            
            for (WebElement el:PageScrubberPagelet) {
                if (!(el.getAttribute("data-key")).contains(year) || year.equals("")) {
                    year = JOptionPane.showInputDialog(null, "Invalid input. Please re-enter (recent/ YYYY)", 
                        "Information", JOptionPane.INFORMATION_MESSAGE);

                } else {
                    //find and click on the input year
                    WebElement yearButton = dr.findElement(By.xpath("//a[contains(@data-key,'" + year + "')]"));                        
                    yearButton.click(); 
                    break;
                }
            }
        }
    } catch(Exception e){
        Logger.getLogger(ExpandFacebook.class.getName()).log(Level.SEVERE, "Invalid input!", e);
    } 

如果使用if替换while循环,则只允许一次无效输入,并且不会再次提示用户第三次。

2 个答案:

答案 0 :(得分:1)

使用此模板作为解决问题的指南!不应该太难,只是一个简单的do-while loop。因为你想要内部至少执行一次以获得第一组测试输入,然后在必要时从那里循环:

do
{
    <GET USER INPUT>
} while (<USER INPUT> != <CORRECT DATA>);

答案 1 :(得分:0)

中断只会破坏最内层的循环(for循环)。然后你需要从最外面的循环中突破。更好的方法是

    boolean goodInput = false;
    do {
        for (WebElement el:PageScrubberPagelet) {
            if (!(el.getAttribute("data-key")).contains(year) || year.equals("")) {
                year = JOptionPane.showInputDialog(null, "Invalid input. Please re-enter (recent/ YYYY)", 
                    "Information", JOptionPane.INFORMATION_MESSAGE);

            } else {
                //find and click on the input year
                WebElement yearButton = dr.findElement(By.xpath("//a[contains(@data-key,'" + year + "')]"));                        
                yearButton.click(); 
                goodInput = true;
                break;
            }
        }
    } while (!goodInput);